为什么递增指针有效,但将其视为数组会失败?第2部分

时间:2017-06-28 05:25:16

标签: c arrays pointers struct

我想我弄清楚问题是什么:C很臭。它以一种方式处理本地声明的指针,将指针作为参数另一种处理。这是对我几天前发布的question的回应。我试图在那里发布,但程序不合适。

{{1}}

1 个答案:

答案 0 :(得分:3)

我不确定你的问题是什么,但是这段代码可能不符合你的要求:

printf("main Pointer to struct." EOL);
for (int i=0; i<count; i++)
{
    printf("index: %d  useless1: %d" EOL, i, b->useless1);
    printf("index: %d  useless2: %d" EOL, i, b->useless2);
    b++;
}
printf(EOL);

printf("main Index into array of structures." EOL);
for (int i=0; i<count; i++)
{
    printf("index: %d  useless1: %d" EOL, i, b[i].useless1);
    printf("index: %d  useless2: %d" EOL, i, b[i].useless2);
}
printf(EOL);

第一个循环会更改b的值,因此第二个循环不会在您认为的位置开始。

考虑这样的事情:

type1* bOrig = b; // store the original value
printf("main Pointer to struct." EOL);
for (int i=0; i<count; i++)
{
    printf("index: %d  useless1: %d" EOL, i, b->useless1);
    printf("index: %d  useless2: %d" EOL, i, b->useless2);
    b++;
}
printf(EOL);
b = bOrig; // restore the original value

printf("main Index into array of structures." EOL);
for (int i=0; i<count; i++)
{
    printf("index: %d  useless1: %d" EOL, i, b[i].useless1);
    printf("index: %d  useless2: %d" EOL, i, b[i].useless2);
}
printf(EOL);