printf("%d %d ",*p,*(a+3));//输出第5个元素是几:5 输出相对首地址偏移3个位置的元素:4 即a[3]} main(){ int a[]={1,2,3,4,5,6};int *p;p=a; //p指向的数组aprintf("%d ",*p); //*p指的是数组a的首地址的数据就是数组的第一个元素,是1printf("%d ",...
int a[]={1,2,3,4,5,6};定义一个一维数组,内含{1,2,3,4,5,6}6个元素,定义*p=a;,表示指针p指向数组a(实际上是数组的第一个元素,即1),然后括号运算符优先级最高,先计算括号里面的,由于++运算符在前面,先计算++p,表示p指针向前移动一个位置,指向第二个元素2,然后*++p表示...
++p就是让p增加1,是什么意思呢?刚才p是指向a[0],现在p增加1,也就是现在p指向a[1]了,(*++p)++的值就是a[1]的值了,也即(*++p)++=2。但是输出值2后,p又指向a[2]了。是2由于*p=a,p指向了a的第一个元素a[0](*++p)++这个先执行++pp指向a[1]p就是a[2]转化为a[2]...
*a是对a相当于进行了一次降维,所以*a是一维数组的首地址,也就是a[0],这么说吧你可以把a[3][2]看成这样子{ {a[0][0],a[0][1],a[0][2],}, {a[1][0],a[1][1],a[1][2],} {a[2][0],a[2][1],a[2][2]} },所以a指向的是这一整个数组,*a指向才...
++(*++p) //p先自加一次,然后*p就是a[1], 最终就是++a[1], 也就是a[1]=a[1]+1 ==2+1==3 首先
include <stdio.h> int main(){ int a[]= {1,2,3,4,5,6,7,8,9,10}, *p, i;p = a;for(i=0; i<10; i++) { printf("%d ", *p);p ++;} return 0;}
你这个i 很莫名其妙啊 上面的程序等同于下面这个程序 int a[]={1,2,3,4,5,6,7,8,9,0};int i;for(i=0;i<10;i++){ printf("%d",a[i]);} for (p=a ;p<a+10;p++)p=a这个意思是 首先 指针p 指向a的首地址 意思是 *p带代替 a[0] ;p++ 比如 a[]={ 1, 2, ...
首先 int a [] [3] = {1,2,3,4,5,6}; 是一个二维数组,但是内存空间中这些数据的存储是连续的。可以理解为 int a [5] = {1,2,3,4,5,6}; a存储的都是数组的首元素地址,区别在于以为一维数组的下标代表的是地址,二维数组下标代表的是行和列的个数。int (*p)[3]; 这里是...
int *p; //定义一个指针p a[]={1,2,3,4,5}; //定义一个数组,有五个元素,初始化为1 2 3 4 5 p=a; //把数组首元的地址赋给p,即*p=a[0]=1;因为在C语言中数组的本质就是指向数组首地址的指针+一串连续的存储空间 将A的...
A正确,选A。*q=*(p+5);是给q指向的目标赋值*(p+5)(就是数组中的6)而不是给指针q赋值,可是q已被初始化为NULL,是个不可使用的指针(即无效指针)。程序