若有以下定义和语句: int a[4]={1,3,5,7},*p; p=&a[2]; 则*--p的值是【 】

2024-05-17

1. 若有以下定义和语句: int a[4]={1,3,5,7},*p; p=&a[2]; 则*--p的值是【 】

结果是3。原理如下:
--是自减运算符,也就是说--p可以等同于p=p-1;

因为p是地址,所以p的自减运算是相当于往前移一个位置,
原来p是指向a[2],往前移一个位置,p就指向了a[1],所以*--p就等于3。

最后再给初学者一个忠告,C的运算符是比较复杂的,而且不同的编译系统对源程序的解释也不尽相同,所以,建议不要在这种问题上钻牛角尖。对不确定的东西,分多句写,或者加上括号,否则很容易被带沟里去。比如上面的语句,完成可以写在*(--p);或者分两句写成p--;*p这样子。如果有人专门考别人这些东西,纯属是显摆,不用理他。

若有以下定义和语句: int a[4]={1,3,5,7},*p; p=&a[2]; 则*--p的值是【 】

2. c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素

如果定义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)。

扩展资料:
对上述二维数组a,虽然a[0]、a都是数组首地址,但二者指向的对象不同,a[0]是一维数组的名字,它指向的是a[0]数组的首元素,对其进行“*”运算,得到的是一个数组元素值,即a[0]数组首元素值,因此,*a[0]与a[0][0]是同一个值;
而a是一个二维数组的名字,它指向的是它所属元素的首元素,它的每一个元素都是一个行数组,因此,它的指针移动单位是“行”,所以a+i指向的是第i个行数组,即指向a[i]。对a进行“*”运算,得到的是一维数组a[0]的首地址,即*a与a[0]是同一个值。
参考资料:
百度百科-数组指针

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

选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++不行。

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

4. 若有定义语句:int a[2][3],*p[3];则下列语句正确的是

答案是 C
解决这类题型首先要分清类型。
A错,虽然 p 的类型是 (int **) ,a 的类型是 (int**),但是数组名代表的地址也不能改变。
B错,因为 p[0]的类型是 (int *),a 的类型是 (int**)。
C对,p[0] 的类型是 (int*),&a[1][2]的类型也是 (int*)。
D错,p[1]的类型是 (int*), &a 的类型是 (int***)。

5. 若有以下定义:int a[3],*p=a ;则&a[2]- p的值是_______。 A) 2 B) 4 C)6 D) 8

是A, &a[2] - p的值为2


若有以下定义:int a[3],*p=a ;则&a[2]- p的值是_______。 A) 2 B) 4 C)6 D) 8

6. 若有以下定义: int a[]={3, 4, 5, 6, 7, 8, 9, 10, 11}, *p=a; 则值为5的表达式是( )。

答案选BD。
这四个选项都是逗号表达式,逗号表达式的结果是最后一个逗号分式的值。
A选项,p最终指向8,所以*(p+1)就是9。
B选项,p+=1 使 p 指向 4,*++p 先将 p 自增指向 5,然后返回 5。
C选项,p+=4 使 p 指向 7,*p++ 返回 7,然后 p 自增指向 8。
D选项 p+=1 使 p 指向 4,++*p 是将 *p 自增,*p 为 4,所以返回值是 5。

7. c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素

首先呢,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
呢就是第二个元素的地址,*取数据咯。

c语言若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素

8. 若有定义:int a[]={2,4,6,8,10,12};*p=a;则*(p+1)值是(),*(a+5)的值是()

(p+1)值是4,(a+5)的值是12。
计算机程序运行于电子计算机上,满足人们某种需求的信息化工具。以某些程序设计语言编写,运行于某种目标结构体系上。打个比方,程序就如同以英语(程序设计语言)写作的文章,要让一个懂得英语的人(编译器)同时也会阅读这篇文章的人(结构体系)来阅读、理解、标记这篇文章。
为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据。从计算机的底层来说,这是由高级语言(例如Java,C/C++,C#等)代码转译成机器语言而被CPU所理解,进行加载。
为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。

扩展资料:
所有程序都基于机器语言运行,机器语言是一个以二进制数字(0和1)构成的语言。一般的,程序是由高级语言编写,然后在编译的过程中,被编译器/解释器转译为机器语言,从而得以执行。
有时,也可用汇编语言进行编程,汇编语言在机器语言上进行了改进,以单词代替了0和1,例如以Add代表相加,Mov代表传递数据等。汇编语言在事实上是机器语言的一个记号,在这种情况下用以翻译的程序。
参考资料来源:百度百科-程序