#include"stdio.h"
main()
{
int i,s=0,*p,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
for(p=a[0];p<a[0]+12;p++)
s+=*p;
printf("s=%d\n",s);
}
//a[]与a为什么不相等啊 我将for(p=a[0];p<a[0]+12;p++)改为for(p=a;p<a+12;p++)就出错呢。对于指针还不是很熟练
不好意思,我是一点没看懂,,,p=a我知道当a为一维数组的时候是对的,当a为二维的时候还不是很懂
追答char b, *a = &b; 如果b的地址是0x234,那么a的值就是0x234. a + 1就是 0x235.
int b, *a = &b; 如果b的地址是0x234,那么a的值就是0x234. a + 4就是 0x238.
就是说指针类型不同,其加减运算的结果不同!
........越来越迷糊
追答!!!
想一下,既然所有的指针保存的是内存地址,那还分 int* char*干什么?
就是因为不同类型的指针其加减运算不同。
char*型加1 就是其地址加1
int*型加1,因为int是4个字节, 其地址其实是加了4
那应该就是a[0]和a的问题一维数组p=a正确,二维数组p=a[0]正确兄台切中了要点