若已定义:int a[5]={0,1,2,3,4},*p=a,则以下输出结果为3的是()

A.printf("%d",*(a+2));
B.printf("%d",p[3]);
C.printf("%d",*(p+2));
D.printf("%d",*p[3]);

*到底是个啥意思啊 T T 谢谢各位大神的解答

选B。p[3]等同与a[3]。
数组的名字a,是表示数组首地址的地址常量。其值就是&a[0];
*p=a;那么p的值也是&a[0];
p和a都表示地址,所以*就是取地址对应的值。
(a+2)就是首地址值往后+2的地址,也就是&a[2],那么*(a+2)就是a[2]的值2。
同理*(P+2)也是a[2]的值2。
*p[3]是不对的,p[3]不是地址是值。
注意:这里p和a值一样,但意义不同。p是指针值可以改变,a是常量不能改变其值。
所以p++可以,a++不行。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-03-05

概念:这里的*是指针的标识符,*p就代表p是一个指针。

*p=a,完整的写法应该是,int *p=a;*代表p是一个指针,int 是指针p指向的数据类型是int型,即整型。

因为p是指针,p=a,也就是p获取了a的起始地址(不懂可以看看指针的定义)

*p可以理解为把指针p指向的地址里面的数字表示出来,

这里p指向a的初始地址,a的初始地址里放的是0,所以*p就是0,

p[1]表示在p的地址上加1,因为p指向a的初始地址,也就相当于就是a的地址上加一,是a[1],所以*p[1]就是1,所以*p[3]就是3,很明显选D

本回答被网友采纳
第2个回答  2019-03-05

    &:取地址符

    *:间接运算符

    &变量:取变量的地址

    *地址:取地址对应的内存空间中的值

    指针[下表]等效数组名[下表]等效 *(指针+下表)

    综上所述:答案选B

若已定义:int a[5]={0,1,2,3,4},*p=a,则以下输出结果为3的是()
p和a都表示地址,所以*就是取地址对应的值。(a+2)就是首地址值往后+2的地址,也就是&a[2],那么*(a+2)就是a[2]的值2。同理*(P+2)也是a[2]的值2。p[3]是不对的,p[3]不是地址是值。注意:这里p和a值一样,但意义不同。p是指针值可以改变,a是常量不能改变其值。所以p++...

若定义inta=【5】={0,1,2,3,4,}
题意就是定义了一个有五个int型变量的数组,p和a的本质都是指针,指向数组的首地址。AC选项意义相同,其首地址指向的内容是0,往后便宜两个,指向2,所以输出是2 B选项就是直接访问3 D选项报错

若已定义:int a[5],*p=a; 无法引用数组元素a[3]的是( )。 A、*p+3...
A无法引用a[3],所以选A——因为*p是第一个元素的值即a[0],所以*p+3是a[0]+3而不是a[3]。其余B:p[3]肯定是a[3]没错;C:*(p+3)把p换成a就是*(a+3),这和a[3]等价;D:&p[0]就是p,参照C选项一模一样了!

C语言选择题
40.若有以下定义:int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为3的表达式是(C )。A.*p B.*(p+1)C.*(p+2) D.*(p+3)41.以下性质不是算法特征是( B)。A.有穷性 B.可重用性 C.确定性 D.有0个或多个输入 42.以下关于C语言优点说法错误的是( B)。A....

若已定义: int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a, i; 其中 0≤i≤9...
正确的是 A) a[i];B) &a[i] 这个是个地址 C) p[i-1] 这个可能会越界 i=0时 p[-1]越界 D) a[10] 越界

11、若已定义: int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a, i; 其中 0 ≤...
d.因为数组定义时是数组内的个数,但是数组是从a[0]开始到a[9]的

若已定义int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;其中 则对a数组元 ...
【答案】:D 解析:通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。

以下程序运行时,若从键盘输入5,则输出结果是( )。
17: D 18: C 19: C 20: B 21: B 22: D 23: B 24: D 25: C

若已定义:int a[ ]={1,2,3,4,5};,则对a数组元素正确的引用是( )。
a 错误,数组的标引不能为负数,而且必须是整数 b 正确,取到的是1,计算机语言中,计数通常是从0开始的,a[0],实际取的是第一个 c 错误,如上所述,总共只有5个数,那么从0开始的话最都就只有a[4]了,到了a[5]就不合法了 d 错误,数组的值的引用方法是[]不是小括号 ...

全国计算机等级考试三级笔试试题及答案?
执行后的输出结果是( )。A) 8,6 B) 8,3 C) 6,4 D) 7,4(21) 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z\/2的值是( )。A) 6 B) 0 C) 2 D) 1(22) 有一函数, ,以下程序段中不能根据x值正确计算出y值的是( )。A) if(x>0) y=1; B) y=0; else if(x...

相似回答