我正在用 C 语言进行一些关于表示多行文本的方法的编程实验。
我想出了四种方法:数组数组、指针数组、数组指针和指针指针。
我遇到了数组指针的小问题。每次我创建一个数组时,它实际上只是重用了我已经创建的数组。
查看我的程序的“数组指针”(pa)部分的输出,了解我的意思:
variable address value
========== ============== =====
pa 0x10f500970
*(pa+0) 0x7fff6f0334bd
*(pa+0)[0] 0x7fff6f0334bd t
*(pa+0)[1] 0x7fff6f0334be e
*(pa+0)[2] 0x7fff6f0334bf s
*(pa+0)[3] 0x7fff6f0334c0 t
*(pa+0)[4] 0x7fff6f0334c1
*(pa+0)[5] 0x7fff6f0334c2 0
*(pa+1) 0x7fff6f0334bd
*(pa+1)[0] 0x7fff6f0334bd t
*(pa+1)[1] 0x7fff6f0334be e
*(pa+1)[2] 0x7fff6f0334bf s
*(pa+1)[3] 0x7fff6f0334c0 t
*(pa+1)[4] 0x7fff6f0334c1
*(pa+1)[5] 0x7fff6f0334c2 1
看看每个数组的地址是一样的吗?不是很酷,是吗?
所以这是我的问题:有没有办法在 > 1 循环中实际声明一个新数组,而不是重写已经存在的数组的内容?
这是snipplet:(LIST_SIZE = 2 and TEXT_SIZE = 6)
void** pa = malloc(LIST_SIZE * sizeof(void*));
printh();
printf("pa\t\t%p\n\n", pa);
for(int i = 0; i < LIST_SIZE; i++)
{
char txt[TEXT_SIZE + 1];
sprintf(txt, "test %d", i);
*(pa + i) = txt;
printf("*(pa+%d)\t\t%p\n\n", i, *(pa + i));
for(int j = 0; j < TEXT_SIZE; j++){
printf("*(pa+%d)[%d]\t%p\t%c\n", i, j, &(((char*)*(pa+i))[j]), ((char*)*(pa+i))[j]);
}
printf("\n");
}
谢谢。如果您有任何其他意见或建议,我也很想听听。