变量char **pptr_char
以NULL
开头。但是随着程序的进行,我们从用户那里获取字符串输入。每个字符串都存储在**pptr_char
中,因此需要在 X 维度和 Y 维度上动态分配内存。这在 C 中可能吗?
由于所有字符串的长度都不相同,指针算术将如何计算,即*ptr_char+1
转到下一个字符串?
知道应该怎么做吗?
是的,这是可能的。您将使用 ptr_char + i
移动到第 i
个字符串。 字符串长度不同并不重要。 指针的长度是否相同才重要,当然它们是。
Points to memory location Memory location contains
ptr_char X a pointer to string1 (string could live anywhere)
ptr_char + 1 X+4 (or 8 for 64-bit) a pointer to string2 (string could live anywhere)
ptr_char + 2 X+8 (or 16) a pointer to string3 (string could live anywhere)
因此,您首先分配一个内存块来保存 N char*
(该块X
启动内存位置(当然,X
是操作系统为您选择的任何内容 - 您无法控制)。
然后,为第 i
个字符串分配内存,并将第 i
个char*
设置为指向该内存。
>char **pptr_char
是一个字符串数组(字符指针)。 pptr_char[0]
是第一个指针,pptr_char[1]
是第二个指针,依此类推,这些指针指向什么并不重要。如果要将字符串存储在连续内存区域中,可以执行以下操作:
pptr_char = (char**)malloc(20*sizeof(char*)); // say we have 20 strings max
pptr_char[0] = (char*) malloc(large chunk size)
strcpy(pptr_char[0], "string0");
pptr_char[1] = pptr_char[0] + strlen(pptr_char[0]+1);
strcpy(pptr_char[1], "string1");
pptr_char[2] = pptr_char[1] + strlen(pptr_char[1]+1);
....