#include "stdio.h"
void main()
{
int *p;
int a[10]={0,1,2,3,4,5,6,7,8,9};
int k=0;
p=a;
for(int i=0;i<10;i++,p++)
{
printf("%d\n",*p);/*实际结果输出了0-9的数字*/
k++;
}
printf("%d",*p+k);/*实际结果输出20*/
}
为什么最后输出的是20呢?按照我个人的理解我觉得是*p最后等于9,而k=10,就是19了,可我屏幕上打出来却是20,这是为什么呢?
明显最后p指向了未知地方
C/C++ code:
#include "stdio.h"
void main()
{
int *p;
int a[10]={0,1,2,3,4,5,6,7,8,9};
int k=0;
p=a;
for(int i=0;i <10;i++,p++)
{
printf("%d\n",*p);/*实际结果输出了0-9的数字*/
k++;
}
p = a;
printf("%d",*p+k);/*实际结果输出20*/
}
看错题目了,嘿嘿~~~
你的p在跳出for循环的时候,实际上最后做了一次++操作!所以p指向的是a[10],而不是a[9]
你printf("%d",a[10]);看看就知道为什么了
哎哟
for(int i=0;i <10;i++,p++) i和p都自加了11次 所以你的P的为a[10] 不信自己打印i的值