1楼:匿名用户
应该是a[6]的地址。
不过严格来讲,p+5表示的是a[1]的地址再加上5,有可能并不会等于a[6]的地址。
若有定义:int a[10],*p=a,则*(p+5)表示()
2楼:李修炎
选a ,因为*p=a,这时是把数组a的首地址传给了指针p,而数组的定义是从a[0]开始的,所以p+5表示的是元素a[5]的地址,希望你现在明白了
3楼:匿名用户
b*(p+5)表示p+5这个地址指向抄单元内容,当然是int的,所以不是地址
p=a;的赋值后,p存放的地址就是数组起始地址也就是数组元素a[0]的地址,*p可以写成*(p+0),p[0],相当于a[0]
*(p+5)相当于p[5],a[5],即变量a[5]的内容所以应当选择b
4楼:艾萨克
b既然有p = a
那么 *(p + 5) p[5] *(a + 5) a[5] 都是一样的
c语言题:若有定义int a[9],*p=a;则p+5表示( )
5楼:匿名用户
答案选:b
刚刚看到a[5]就选了
*p=a;指向的就是a[0]
p+5就相当于向后移动5个,就是a[5],表示地址如果是*(p+5),就表示值
6楼:匿名用户
你好,选b。
int *p = a表示指针p指向数组a的首地址。也可以说是a[0]的地址。所以p+5指向a[5]的地址
若有定义int a[10],*p=a;,则p+5表示什么
7楼:匿名用户
a 是个常量,不能变化,但是p是个指针变量,可以加减,p的加减与p的类型有关,如果p是个int 则,每次加四个字节,就是int 型的长度,其它的也是相同的。char 每次加一个字节。
p+5代表第六个数值的地址。即*(p+5)=a[5];
不知道你是否明白,如果不清楚的话,加我好友,咱们共同**
c语言int a[5],*p; p=a;和p=&a;的对错问题~希望详细点,谢谢啦
8楼:关注
先上结论:
对于int a[5],*p;
p=a; 或p=&a[0]是正确的
p=&a严格来说是错误的
首先要搞清楚a与&a的区别:a表示数组首内元素的首地址容,即元素a[0]的地址;&a表示整个数组的地址。二者的值是相同的,但意义并不一样。
正如成都市**与四川省**的地址都在成都,但二者表示的含义不同。
如下图所示,a表示a[0]的地址
&a则表示整个数组的地址
二者的值之所以相同,因为地址是取自第一个字节的地址,数组元素a[0]的第一个字节与整个数组的第一个字节显然是相同的。
a与&a[0]及&a的值如下:
1244980,1244980,1244980
a+1与&a[0]+1值如下:
1244984,1244984
但&a+1的值为1245000。
a+1与&a[0]+1都是表示下一个数组元素的地址,以元素为单位相加,地址值+4。而&a+1表示下一个数组的地址,以数组为单位相加,地址值+20.
所以,p=a; 或p=&a[0]是正确的,表示指针p指向数组的首元素。
9楼:
有了int a[5],*p;,p=&a;显然就是错误的。int a[5],*p;说明了a和p都是int *型指针,只是a是常指针,p是指回针变量,那么p=a;就合情答合理;&a是指向a[5]的指针,与它类型匹配的是int (*)[5],而不是int *。所以p=&a;的等号两边类型不匹配,编译都过不了......
10楼:凉夏风歌
1.int a[10],*p;
p=a;//a是首地址
2.int a[10],*p=a;//定义时赋值3.int a[10],*p;
p=&a[0];
以上都是等效的,没有p=&a的
谭浩强是说前者对
11楼:拾梦人
p=&a,是把a的地址赋给p,再通过*p得到a所赋给p的地址,取a里面的内容 ,对于数组的话好像两个都对的,我用vc6.0编译的时候都通过的
12楼:黑绿蓝
不要太相信书上写的话了,遇到问题最好的办法是动手试一试
听过的会忘记,看过的只能记住,只有做过的才能理解
13楼:丁荣卫
p=a,将数组名(即数组首地址)赋值给指针是对的
p=&a,编译将会出错
14楼:匿名用户
前者是对的,逻辑上两个都是对的,p指向a的地址,a和&a都表示数组地址(数组特有)
怀疑后一个可能编译不过
15楼:路图元
a是一个数组,所以它本身就表示这个数组的首地址,所以你要让p指向这个地址就直接p=a就好了!当然,如果你拼要加&的话,你也可以用p=&a[0];
c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素
16楼:匿名用户
如果定义int (*p)[n];p1=a;p1++后,p指向a[1][0];
则p+j将指向a[0]数组中的元素a[0][j]。
由于a[0]、a[1]┅a[m-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:
p+i*n+j,相应的如果用p来表示,则为*(p+i)+j;
元素a[i][j]相应的指针表示为:
*( p+i*n+j) ,相应的如果用p1来表示,则为*(*(p+i)+j)。
推出以下的等价关系:
a+i == p+i;
a[i] == p[i] == *(a+i) == *(p+i);
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)。
17楼:键盘未找到
a.表示&a[1].
b.a[3]
c.&a[1][3]
d.a[0][2]
18楼:匿名用户
首先呢,a是二维数组,不解释。
然后呢,p是一个指针,什么样的指针呢,就是指向一维数组的指针,而且这个一维数组的元素个数呢是5.
然后呢,p=a;就是把p指向a数组。
分析选项:
a p+1 .因为p是一维数组指针,所以p每+1就是+1行。错误。
b *(p+3)是指第4行的首地址,访问不到元素。需要再*c *(p+1) + 3 对地址+3 没啦意义d *(*p+2) *p是第0行首地址 +2 呢就是第二个元素的地址,*取数据咯。
19楼:一方通通
本题中定义了一个二维数组c和一个数组指针p并初始化让它指向c,显然此时p中的各元素为地址,
a中p+1,此时的1代表的长度是整个二维数组c的长度,p+1将让p指向c数组后面的元素,故不能引用c数组中的成员,故选项a错误;同理,选项b和选项c都不正确,
d中p[0]+2代表的是第一行第三个元素的地址,而*(p[0]+2)将代表第一行第三个元素的值。
c语言..........若有定义语句:int a[4]={1,3,5,7},*p;p=a;则*(p+1)的值
20楼:轻曳风铃
*(p+1)=3
楼主追问
char s[10] = ;则strlen(s)的值为strlen是计算字符串长度,遇到'\0'结束返回长度,所以是1struct num n = ;struct num *pn = &n ;则表达式pn->b/n.a * ++pn->b的值是
pn结构体指针指向结构体n,n被初始化成
pn->b/n.a * ++pn->b
<=>pn->b = pn->b+1;
pn->b/n.a*(pn->b + 1)=3/1*2=6结构体的->运算符优先级大于++
++这里是前加,先加1后再使用加后的值
21楼:苓爱你无言
*p=a中的a就是&a[0],即a[0]的地址,所以*p(p+1)=a[1]的值,即为3
22楼:匿名用户
p指向a的首地址,所以*(p+1)=a[1]=3
C语言,定义二维数组a,则(a+1)表示什么a+5)表示什么
1楼 倒霉孩子改名啦 a 1 相当于a 0 1 , a 5 相当于a 0 5 已经越界了 c语言 二维数组 a 1 1 和 a 5 分别表达什么? 2楼 匿名用户 a 1 a 1 那么 a 1 1 a 1 1 a 5 a 5 c语言定义了一个二维数组a 5 3 用循环实现a 0 0 a 1 0 a ...
c语言中有时会定义p a是什么意思不应该是p a吗
1楼 夏成 int a int p a 相当于int p p a 记住就行了 除了定义的时候,其他时候 p 正常情况 只能等于内容 a的值 2楼 匿名用户 int a int p a 或者int p p a c语言中 p a和p a有什么区别 3楼 非常可爱 c语言中 p a和p a只有一个区别就是...
C语言我想问的是p-a是什么意思
1楼 搁浅的珊瑚海 程序定义了一个3行4列的二维数组a,p是指向数组首地址的指针,里面方数组首地址,a 0 是第0行的地址,二维数组不是可以看作元素都是一维数组的一位数组么,所以a 0 也是数组元素a 0 0 的地址,p a 0 就是看p所指向的数组元素的地址跟a 0 0 的位移,12的地址正好是p...