C语言期末考试:指针专题

版权申诉
0 下载量 180 浏览量 更新于2024-08-26 收藏 66KB PDF 举报
"C语言期末考试题目2.pdf" 这篇资源主要涵盖了C语言中的指针相关知识点,通过一系列选择题的形式来考察对指针的理解。以下是这些题目涉及的关键知识点的详细解释: 1. 指针与函数参数:题目中提到了`scanf()`和`printf()`函数,它们可以接受指针作为参数,用于读取或输出数据。选项A和B正确地使用了指针,而选项D中`printf("%d", y)`也是正确的,因为`y`是一个指向整型变量的指针,可以用来传递地址给`printf()`。 2. 函数指针声明:`int (*p)();`表示`p`是一个指向函数的指针,这个函数没有参数并且返回一个整型值。因此,选项C是正确的。 3. 二维指针与一维数组:`int (*p)[4];`声明`p`是一个指针,它指向一个包含4个整型元素的一维数组。所以,选项C正确地描述了`p`的含义。 4. 字符串与指针操作:在C语言中,字符串实际上是以`\0`结尾的字符数组。选项B中的`s=p+s;`会导致丢失`s`原始的地址,从而无法正确访问字符串。因此,它是错误的。 5. 数组元素引用:`s[++s];`会先自增`s`,然后尝试引用超出数组范围的元素,这是非法的。选项D是错误的。 6. 字符串赋值:在C语言中,字符串必须以空字符`\0`结束。因此,将字符串常量赋值给指针应使用双引号,如`"12345"`。选项A和B的赋值语句是不合法的,而选项C和D的区别在于是否为指针变量赋值。选项C正确地为指针`ps`赋值,而选项D尝试为`*ps`(即`s`的第一个元素)赋值,这会导致错误,因为`s`是字符数组,而`"12345"`是字符串常量。 7. 二维数组与指针:`a+1`指向`a`的下一个元素,即第二行的第一个元素。`*a+1`指向第一行的第二个元素。要显示"ShangHai",我们需要跳过第一个字符串的首字母。选项A和B试图打印整个字符串,但方式不正确。选项C尝试打印首字母后的一个字符串,这会失败。选项D正确地通过`&a[1][0]`获取了"ShangHai"的地址。 8. 多维数组与指针:`a[1][2]`是数组`a`中第二个子数组的第三个元素。`ptr`是一个指向数组的指针,`p`是一个指向数组首元素的指针。选项A正确地通过指针运算表达了`a[1][2]`。选项B的`p+5`实际上是`p`加上5个整型元素的大小,而不是2个数组元素,因此是错误的。选项C和D试图通过加法操作符访问`ptr`,但没有正确解引用。 9. 一维数组与指针:对于数组`a`,`p+=2`后,`p`指向`a[2]`,即值为3的元素。接着,`*p++`会返回3并使`p`指向`a[3]`,而`*++p`会首先使`p`指向`a[3]`,然后返回`a[3]`的值,即4。因此,只有选项B的表达式值为3。 以上就是C语言指针相关的知识点详解,包括指针与函数、指针类型声明、二维数组和多维数组的指针操作、字符串处理以及数组和指针的运算等。