【发布时间】:2013-10-24 19:37:53
【问题描述】:
我正在用 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
看看每个数组的地址是一样的吗?不是很酷,是吗?
所以这是我的问题:有没有办法在 n > 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");
}
谢谢。如果您有任何其他的 cmets 或建议,我也有兴趣听听。
【问题讨论】:
标签: c arrays loops variable-declaration