问我正在尝试使用指针来操作一个int数组。这段代码有什么问题?
int array[5], i, *ip; for(i = 0; i < 5; i++) array[i] = i; ip = array; printf("%d\n", *(ip + 3 * sizeof(int)));我期望最后一行打印 3,但它打印的是垃圾值。
答你做得比你需要做的,或者应该做的要多。C 语言中的指针算术总是自动按所指对象的尺寸进行缩放。你想表达的简单来说就是
printf("%d\n", *(ip + 3)); /* or ip[3] -- see Q 6.3 */这将打印数组的第三个元素。在这类代码中,您无需担心按所指元素的尺寸进行缩放——通过显式地尝试这样做,您无意中访问了数组末尾之外的一个不存在的元素(可能是array[6]或array[12],取决于sizeof(int)在你的机器上)。
但是,请参阅问题 7.19b。
参考文献:K&R1 第 5.3 节,第 94 页
K&R2 第 5.4 节,第 103 页
ISO 第 6.3.6 节
H&S 第 7.6.2 节,第 204 页