为您找到"
int a[2]={1,3},*p=&a[0]+1; *p的值
"相关结果约100,000,000个
二维数组下标代表的是行和列的个数。int (*p)[3]; 这里是用指针的形式 声明一个新的数组,p = a; 这里把a数组的首元素地址赋给 指针数组,此时新声明的指针数组就指向了a数组,*p就等于a[0];所以 (*p)[2]等价于a[2] = 3;一维数组下标为二的元素 ...
include <stdio.h> void main(){ int a[4] = {1, 2, 3, 4};int * p;p = a + 3;//这样能实现p指针数组a的第四个元素指向的空间(相信你能理解)//p = (int *)a[3]; //这里把一个占用4字节的整型数据赋给1字节的整型指针,编译能通过,但运行是通不过的 printf("* p = ...
与p=&a[0]等价的语句p=a;(p+1)的值是2 (a+1)的值是2 int
){int a[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)(p+i)=i+1;printf("%d \n",a[1][2]);}其中p=&a[0][0]; 就是取二维数组的首地址(二维数组占用的内存空间是线性的)for(i=0;i<9;i++) *(p+i)=i+1; 就是给这个二维数组赋值,也就是a[0][0]=0+1,...
答案是19 过程 x=0时,*(p+x)=*p=a[1]=4 所以y=1+4=5 x=1时,*(p+x)=*(p+1)=a[2]=6 所以y=5+6=11 x=2时,*(p+x)=*(p+2)=a[3]=8 所以y=11+8=19 输出
(++p)=*(a+1)=a[1]=3 所以(*(++p))++=3+1 p=a[0]=1 所以*p++=2 a[2]=5
C &p[2] 正确,就是a[2]的地址 A *p++ 这个的值是 a[1],是元素的值 B &(a+1) 这个非法的,a+1是个纯右值,不可取地址 D 同上 C
int *p=arr; // 这是声明加初始化,*p 声明p 是指针,p 只能用来指向 int 型地址,初始化让它指向数组arr 的 首地址,也就是 p=&arr[0];p++; // 这是语句,*p 是 p指向的存储单元里的值,现在要 自增1。也就是执行了 arr[0]=arr[0]+1;p++; // 这是语句,p 是地址, p...
其实只需要:a[1][2]的表达式是*(*(a+1)+2) 为什么?(地址加数字就是往后移几个后的地址)a指的是这个二维数组名或起始地址 a+1指的是第一行的起始地址 (a+1)加*后指的是第一行第0列的起始地址(因为还有一整行,不能具体到某个值,所以还是地址)(a+1)+2指的是第一行第二列的...
int a[5]={2,4,6,8,10},*p,**k;p=a;//p指向a数组,p保存了a数组的首地址。a[0]是数组的首元素,所以*p的值就是a[0]的值。k=&p;//k指针指向p,k保存了p的地址。(k可以成为指针的指针)printf("%d",*(p++));//表达式“*(p++)”整体的值相当于*p的值,就是a[0]的值...