【发布时间】:2013-04-21 23:46:32
【问题描述】:
我有一个关于指针的问题。我开始掌握这个概念,但这段特殊的代码正在威胁这种理解,我只想澄清它。
请注意“B”行,即printf("ptr + %d = %d\n",i, *ptr++); /*<--- B*/
我的印象是,由于*ptr 被初始化为&my_array[0],然后*ptr++(这将转换为“存储在ptr 中的地址中的任何内容,添加一个”)将打印out 23,即my_array[1] 处的值。
然而,它会打印出my_array[0] 的值,即1。
我很困惑++ 是否添加到地址本身(例如,1004 变为 1005),并且由于整数占用大约 4 个字节的空间,它会落入my_array[0] 的范围内(因为该值 1 将占用地址 1001、1002、1003、1004,并且由于 my_array[0] 从 1001 开始并且仅上升到 1002,因此 *ptr++ 仍将打印出 my_array[0],即 @987654334 @)...
或者...
*ptr++ 是否从my_array[0](也就是*ptr)变成my_array[1]*ptr++,这是我最初的想法。
基本上,请解释一下*ptr++ 对这个程序的具体作用。请向我解释一下,就好像我是一个五岁的孩子一样。
非常感谢,代码如下:
#include <stdio.h>
int my_array[] = { 1, 23, 17, 4, -5, 100 };
int *ptr;
int main(void)
{
int i;
ptr = &my_array[0]; /* point our pointer to the first
element of the array */
printf("\n\n");
for (i = 0; i < 6; i++)
{
printf("my_array[%d] = %d ", i, my_array[i]); /*<-- A */
printf("ptr + %d = %d\n", i, *ptr++); /*<--- B*/
}
return 0;
}
【问题讨论】: