繁体   English   中英

指向 char 类型指针的动态分配 memory 的指针的类型是什么?

[英]what is the type of a pointer to dynamically allocated memory of pointers of type char?

我是 C 的新手。 我需要分配 memory 并在其中存储指针。 这些指针是 char 类型的。 那么指向 memory 的指针的类型是什么? 字符? 还是很长,因为地址只是数字?

类型是char** ,指向 char 的指针,也就是指向 char 的双指针。

请注意,如果您不想,则不需要手动为指针分配空间。

拿下代码:

#define POINTER_N 10
//...
char *ptr[POINTER_N]; //array of 10 pointers to char

这已经为这 10 个指针预留了空间,它们的大小是指向 char 的指针的大小,这个大小取决于您的系统,对于 64 位系统,指针是 8 个字节,对于 32 位系统,它是 4 个字节,这是通用的, 这些值可能会有所不同,具体取决于实现。

已经有了指针,您只需要为字符串本身分配空间,因此对于初始化为\0的 20 个字符字符串,您将执行以下操作:

#include <stdlib.h>
#define STRING_SIZE 21
//...    
for(size_t i = 0; i < POINTER_N; i++){
    ptr[i] = calloc(STRING_SIZE, sizeof *ptr[0]); //21 char long string

这就足够了,请注意我为 null 终止符保留了一个额外的字符。

如果您真的想自己为这些指针分配空间,您将声明一个双指针,并为您需要的指向 char 的指针数量分配空间:

char **ptr = calloc(POINTER_N, sizeof *ptr); // 10 pointers to pointers to char

对于字符串:

for(size_t i = 0; i < POINTER_N; i++){
    ptr[i] = calloc(STRING_SIZE, sizeof **ptr); 

假设我了解您的要求,听起来这就是您想要的:

#define N 10 // or however many elements you want
...
char **arr = malloc( sizeof *arr * N ); // sizeof *arr == sizeof (char *)

每个arr[i]都将具有char *类型。

如果你想要一个char数组,那么它将是

char *arr = malloc( sizeof *arr * N );

并且每个arr[i]都将具有char类型。

因此,一般规则,如果要分配类型T的数组,请使用

T *arr = malloc( sizeof *arr * N );

指针具有指向所引用 object 的指针的类型。 memory 的分配方式无关紧要。

例子

void *ptr = malloc(10);  // pointer to void

int c;
void *ptr = &c;          //pointer to void

int *ptr = malloc(sizeof(*ptr);  // pointer to integer
int *ptr = &c;                   // pointer to integer

char *cp = malloc(100);          // pointer to char
strcpy(cp, "Hello");

void foo(double *x)              // x is a pointer to double.
{
 /* .... */
} 

double **p;                      //pointer to pointer to double

/* etc etc */

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM