我是C的新手。我需要分配内存并将指针存储在其中。这些指针的类型为char。那么指向该内存的指针的类型是什么?炭?还是长,因为地址就是数字?
指针具有指向所引用对象的指针的类型。内存的分配方式无关紧要。
示例
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 */
您将需要为calloc
的char指针分配内存。
在此行
char *ptr[10]; //array of 10 pointers to char
此声明已经为这10个指针保留了空间,它们的大小是指向char的指针的大小,这取决于您的系统,对于64位系统,指针的大小为8个字节,对于32位,则为4个字节,这是通用的,根据实现的不同,这些值可能会有差异。
这里您将需要为10个指针分配空间,因此对于初始化为\0
的10个字符的字符串,您可以这样做:
#include <stdlib.h>
//...
for(size_t i = 0; i < 10; i++){
ptr[i] = calloc(0, sizeof(char) * 11);
[sizeof(char)
可以删除,因为char类型的大小始终为1个字节:
for(size_t i = 0; i < 10; i++){
ptr[i] = calloc(0, 11);
就足够了,请注意,我为空终止符保留了一个额外的字符。
如果您要自己分配空间,则需要声明一个双指针:
char **ptr = calloc(NULL, sizeof(*ptr) * 10); // space for 10 pointers to char initialized with NULL.
其余部分相同
for(size_t i = 0; i < 10; i++){
ptr[i] = calloc(0, 11);
假设我了解您的要求,听起来这就是您想要的:
#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 );