【发布时间】:2011-04-02 02:19:59
【问题描述】:
gcc 4.4.4 c89
#define SIZE 5
char *names[SIZE] = {"peter", "lisa", "simon", "sarah", "julie"};
char *search_names[SIZE] = {0};
size_t i = 0;
for(i = 0; i < SIZE; i++ ) {
search_names[i] = names[i]++;
}
for(i = 0; i < SIZE; i++) {
printf("name to search for [ %s ]\n", search_names[i]);
}
我对 search_names[i] = names[i]++; 这一行感到困惑,这是一个指向 char* 的指针数组。只是我的实验我在想它应该是&names[i]++。因为我想在那个位置获得指针。所以拥有 & 会让我得到指针指向的地址。
我想我也可以像这样递增:(names[i]) + i;
只是对那条线感到困惑。
【问题讨论】:
-
我不认为我完全理解您的代码的意图。这两个数组都是指向 char 的指针数组。您只是将一个数组复制到另一个数组吗?在这种情况下,它应该只是“search_names[i] = names[i];”。为什么你需要增加呢?
-
是的,你是对的。我只是在试验和尝试不同的东西。但是,search_names[i] = names[i];产生与 search_names[i] = names[i]++; 相同的结果这是否意味着它们在某种意义上是平等的。 names[i]++ 会增加什么?谢谢。
-
names[i] 指的是一些字符串,例如“peter”。在 C 中,字符串存储为字符数组,以“\0”结尾。当你抓取 names[i] 时,你实际上是在抓取一个指向位于 names[i] 的字符串中第一个元素的指针,换句话说,是一个指向 "peter\0" 中的 "p" 的指针。当您增加该指针时,它会向前移动一个空格,指向“e”,形成“eter\0”。但是,由于模糊的优先规则,在分配给 search_names[i] 之后会发生增量,所以看起来相同,但是您正在执行额外的指针操作。