簡體   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