为您找到"
int a[]={1,2,3,4,5};int *p;p=&a,这样的操作不行?
"相关结果约100,000,000个
经过p = &a[0];赋值操作,p已经指向数组a的第一个元素3,那么*(p + 1)就是a[]的第二个元素4,那么3 == 4则为假,故选择A。答案
A是错误的。A是地址与整型相加,本身就是错误的。参照C选项,正确写法可以写成*(p+i),则i代表地址偏移。B中,先算p-a,即两个地址相减,值为0,则a[p-a]等价于a[0]。C中,根据i的值进行地址偏移,加上*取出地址中的元素。D中,p[i]等价于a[i]。望采纳。
选B 记住这样一个无条件相等的等式:(p+i)与P[i]无条件等价。因为p是指向数组a首元素的地址,所以p[i]又和a[i]等价。易知B选项即为p[8],也即为a[8],其值为9。
选择B int *p=&x[2]表示p是一个指向x[2]地址单元的指针,就*p=x[2]=3.所以你要找的是哪一个表达式的意思是:*p.B中 先取值,然后p再++,即输出3,然后p指向&x[3].B
a[3][2]={{1,2},{3,4},{5,6}};int (*p)[3] = a;(*P)代表的是行;则p指针指向的是函数3个元素(每个元素两个值)的数组;*(p+1)为这个数组第二个元素({3,4})的首地址,(*(p+1)+1)为{3,4}里的第二个元素,为4。p...
1。 char a[20]; 2。 int *ptr=a; ... ... 3。 ptr+=5; 在这个例子中,ptr被加上了5,编译器是这样处理的:将指针ptr的值加上5乘sizeof(int),在32位程序中就是加上了5乘4=20。由于地址的单位是字节,故现在的ptr所指向的地址比起加5后的ptr所指向的地址来说,向高地址方向移动了20个字节。在...
我也来回答一下,个人见解,欢迎指教。int a[5],*p;p=a;p=&a[0];p=&a int a[5];//a是指针常量,表示的是数组首元素的地址,即a=&a[0]。int *p=a;p=&a[0];//因为a=a[0],所以p=a 和p=&a[0]是等价的。p=&a//int *p,p是一个指向int类型的指针,而&a表示的是指向...
a代表数组起始地址,也就是1的地址,a+10是0后面地址 a
include<stdio.h>int main(){int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a,*q=a+9,t; for(;p<q;p++,q--) {t=*p;*p=*q;*q=t;} for(p=a;p<a+10;p++) printf("%d ",*p); return 0;}
答案选B p = a;让a指向int a[2][2]的int a[][2];p++让p指向int[][2]的第二个地址,int a[1][2]的地址,所以**p的值是3.