![](/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.