prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 4.4

我正在尝试使用指针来操作一个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 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管