易截截图软件、单文件、免安装、纯绿色、仅160KB

请教一题C,我看不明白! - C/C++ / C语言

#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的值

引用
for(int i=0;i <1


相关问答:

C 程序问题 (二) - C/C++ / C语言

问一下:
#include <stdio.h>
int main()
{
  char x, y, z;
  int i;
  int a[16];
  for(i=0; i<=16; i++)
  {
  a[i] = 0;
  ......

C 程序问题 (三) - C/C++ / C语言

问题一:
在对齐为4的情况下
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
假设在32位C ......

刚学C,用C实现编码 - C/C++ / C语言

#include"stdio.h"
#include"stdlib.h"
void ContrTwo(char i)
{
char str1[8];
itoa(i,str1,2);
printf("%s",str1);
}
unsigned char leftRot(char str,int i);
unsign ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号