C高级指针习题解析与选择题解答

0 下载量 37 浏览量 更新于2024-08-03 收藏 44KB DOC 举报
在C高级编程的第四天作业中,指针是核心概念之一。以下是关于指针的一些重要知识点: 1. **指针的理解**:指针是一个变量,它存储的是另一个变量的内存地址,而不是它的值、名字或一个标志。通过指针,我们可以间接访问和操作内存中的数据。 2. **赋值语句**:题目中的选择题展示了对指针赋值和操作的常见陷阱。例如,选项B `ptr2=k` 是错误的,因为指针不能直接赋值给整型变量,而是应该使用 `ptr2 = &k` 来指向变量k的地址。 3. **输入与输出**:在读取和写入数据时,使用指针要注意类型匹配。如选项D所示,`scanf` 应该接受地址,即 `scanf("%d", &n);` 和 `*p=n;*p=m;` 用于修改指针所指向变量的值。 4. **函数与指针**:`print_value` 函数通过传入指针 `x`,改变被指向的变量值,然后递增它。由于传入的是 `&a`,所以输出将是 `26`,对应选项D。 5. **指针的赋值**:正确的指针赋值包括选项B(`p1` 指向 `m`,`p2` 可以指向不同的变量地址)和C(`p1` 和 `p2` 都指向 `m`,但 `p2` 不再是 `p1` 的副本)。 6. **地址的表示**:选项D中,`&a` 表示变量a的地址,`*p` 表示指针p所指向的值,`&*p` 表示指针p所指向的地址,因此它们都是代表地址的不同方式。 7. **字符数组和字符串**:选项C表明,字符串常量在声明时需要使用 `s="china"`,而不是将字符串赋值给指针,或者在指针后跟 `=`。A、B和D选项中的语法都是不正确的。 8. **for循环次数**:在给定的字符串 `s` 中,`\t` 是一个制表符,`\018` 是十六进制的换页符,实际有效字符只有两个:`a` 和 `b`。for循环条件 `*s!='\0'` 将会执行到遇到第一个空字符为止,即执行6次,对应选项C。 9. **字符串赋值**:选项C是正确的,使用字符指针 `s` 直接赋值字符串常量 `"ABCDE"`,而其他选项要么没有正确分配足够的空间,要么没有完成字符串终止符 `\0` 的赋值,导致野指针问题。 本题涵盖指针的基本概念、赋值、输入输出、函数调用以及字符串处理等多个方面,有助于巩固对C语言指针的理解和实践应用。