C语言指针基础练习与解析

5星 · 超过95%的资源 需积分: 44 56 下载量 96 浏览量 更新于2024-11-06 1 收藏 71KB DOC 举报
这篇资源主要是一份关于C语言指针的基础练习题,适合初学者进行自我检测和提升。通过这些题目,学习者可以更好地理解和掌握C语言中的指针概念及其运用。 1. 这道题考察了指针和解引用的概念。选项A表示`*p`等于`a`的值,即8,这是正确的;选项B表示`p`指向`a`的地址,也是正确的;选项C表示`*a`(即`a`的值)与`*p`相等,同样正确;选项D中的`*&a`是对`a`的地址取地址,而`&*a`相当于`a`的地址,因此选项D也是正确的。 2. 题目中`short a[2]`定义了一个包含两个元素的短整型数组,`p`初始化为指向`a[0]`的地址。执行`p++`后,`p`将指向`a[1]`,所以指针`p`的值应该是`2002`,因此答案是C。 3. 数组`a`的第二个元素可以通过`a[1]`、`p[1]`、`*(p+1)`来表示,但`*p+1`是错误的,因为它首先解引用`p`得到`a[0]`的值,然后加1,而不是偏移地址到`a[1]`。因此答案是C。 4. 变量`a`可以通过`*&a`、`*p`、`**q`来表示,但是`*q`仅表示`p`的值,即`a`的地址,而不是`a`本身,因此答案是C。 5. 语句`int *p[10], (*q)[10];`中,`p`是一个包含10个指向整型变量的指针的数组,而`q`是一个指向包含10个整型变量数组的指针。因此,答案是D,即④、③。 6. 定义了二维数组`a`和指针`p`,执行`p++`后,`p`指向第二行的第一个元素,因此`**p`代表的元素是85,答案是D。 7. 执行语句后,`p`指向字符串"abcd"的首地址,`(p+4)`指向字符数组末尾的空字符`\0`,因此答案是B。 8. `*(*(p+2)+1)`表示访问数组`a`的第三行第二个元素,即`a[2][1]`,其值为50,因此答案是C。 9. 程序中`p`是一个指向数组的指针数组,`*p[1]`和`(*p)[1]`都是获取第一行的第二个元素,即4,`p[3][2]`是第四行的第三个元素,即9,`*(p[3]+1)`是第四行的第二个元素,即11。所以输出应为`4,4,9,11`,答案是C。 10. A选项是错误的,因为`s[4]`只能容纳4个字符,而"abcde"有5个字符;B选项是危险的,因为`s`未初始化,`gets`可能会导致缓冲区溢出;C选项是正确的,它声明了一个指向字符的指针,并且可以用来存储字符串。 通过这些题目,学习者可以深入理解指针在C语言中的基本操作,包括指针的赋值、解引用、数组和指针的关系、指针数组以及多级指针的使用等。这些知识点对于编写C语言程序至关重要。