C语言指针练习与解析

需积分: 11 0 下载量 42 浏览量 更新于2024-08-05 收藏 21KB DOCX 举报
"C语言指针基础测试题目及解析" C语言中的指针是其核心特性之一,对于初学者来说,理解和掌握指针至关重要。指针能够直接操作内存地址,提供了强大的数据操作能力。以下是对提供的指针练习题的详细解释: 1. 问题1:在C语言中,定义inta=8,*p=&a;,*p表示a的值,即8,而&a表示a的地址。因此,选项A和B正确,C选项的*&a=*p等价于a的值等于p的值,也正确。选项D错误,因为*&a=&*8尝试取8的地址,但8是一个常量,不能被赋值。答案是D。 2. 问题2:定义shorta[2]={8,10},*p=&a[0];,p++将使指针移动到数组的下一个元素。由于short占2个字节,所以地址会增加2,因此p++后的值为2002。答案是C。 3. 问题3:数组inta[8]的第二个元素可以通过a[1]、p[1]、*(p+1)访问,但*a+1表示增加数值a的值,而不是指针地址。答案是C。 4. 问题4:定义inta,*p=&a,**q=&p;,*q表示p的值,即a的地址,**q则解引用两次,直接获取a的值。因此,A、B、D都能表示变量a,C选项不能。答案是C。 5. 问题5:p是一个指向整型数组的指针,意味着它指向一个包含10个整型元素的数组。q是一个指向指针的指针,可以看作是一个数组,数组的每个元素都是一个指向整型变量的指针。答案是D。 6. 问题6:定义inta[2][4]={{80,81,82,83},{84,85,86,87}},(*p)[4]=a;,执行p++后,p指向了第二个子数组的首地址,因此**p代表的元素是85。答案是D。 7. 问题7:执行语句“chara[10]={"abcd"},*p=a;”后,*(p+4)表示p向后移动4个字符位置,即'd'之后的位置,这里'a'数组中没有更多的字符,所以*(p+4)的值是未定义的行为,答案是D。 8. 问题8:定义inta[3][2]={10,20,30,40,50,60},(*p)[2]=a;,*(*(p+2)+1)表示对p+2(指向a[2])解引用后,再加1,即访问a[2][1],其值为50。答案是C。 9. 问题9:程序创建了一个4x3的二维数组,并定义了指针数组p来存储每一行的首地址。表达式中,*p[1]和(*p)[1]都表示a[1][0],即4;p[3][2]表示a[3][2],即9;*(p[3]+1)表示a[3][1],即11。因此,输出为4,4,9,11。答案是A。 10. 问题10:该问题需要提供完整的语句或语句组才能进行解答。 通过以上题目解析,我们可以看到指针涉及到的知识点包括指针的定义、指针的运算、数组与指针的关系、多维数组与指针的交互以及指针数组的使用等。熟练掌握这些知识点,将有助于深入理解C语言的指针操作。