c语言:设int a 10p a则p+5表示的是()

2021-02-24 21:01:42 字数 4301 阅读 4788

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...