![](/img/trans.png)
[英]What if memory is not allocated to '\0' in char array and char pointer
[英]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.