int
main()
... {
int s[5]=...{6,7,8,9,10};
int * p;
p=s;
*(s+2)+=2;
cout<<*s<<*(s+2)<<endl;
return 0;
}
... {
int s[5]=...{6,7,8,9,10};
int * p;
p=s;
*(s+2)+=2;
cout<<*s<<*(s+2)<<endl;
return 0;
}
上面函数打印的结果是什么?
分析:
*(s+2) += 2;和下面的语句一样
首先 *(s+2) = *(s+2) + 2
其次 要理解*(s+2)就是一个整型的变量(相当于int i 中的i一样的一个变量)
基于上述分析 结果不难得出结果:
*s = 6
*(s+2) = 10
我开始犯糊涂了,认为(s+2)是一个地址*(s+2) 就是一个值了,既然一个值(常量)如何能被赋值呢?
郁闷了半天,最后终于醒悟*(s+2)相当是一个变量,就像int i中的i一样是一个变量一样,教科书里面经常说*(s+2)就是取(s+2)的值,这样的说法我想容易误道人。
我们程序中通常输出i这样类似变量的值,时间长了我就以为*(s+2)是一个值了,艾
总结如下:
int *i;
int j = 5;
i = &j;
*i就相当是一个普通的变量和j一样的普通变量,但是i就是一个指针变量。