C语言基础知识:指针与变量操作

0 下载量 79 浏览量 更新于2024-08-03 收藏 1.19MB PDF 举报
"C基础day94.10" 在C语言中,指针是编程中的一个重要概念,它存储了变量的地址,而不是变量的值。因此,当提到"变量的指针"时,这意味着指针变量存储了该变量内存位置的地址。选项A表示值,选项B表示地址(正确答案),选项C表示变量名,选项D表示一个标志。因此,第一题的正确答案是B。 第二题涉及指针操作。已知`int k=2; int*ptr1, *ptr2;`且`ptr1`和`ptr2`都指向变量`k`。赋值语句`ptr1=ptr2`是允许的,因为这将`ptr1`的地址设置为与`ptr2`相同,都指向`k`。选项A、D也是合法的,它们通过指针访问并操作`k`的值。但是,`ptr2=k`是错误的,因为它试图将整型变量`k`的值赋给指针`ptr2`,而不是地址,所以选项B是不能正确执行的。 第三题考察输入输出与指针的使用。正确的方式是先声明指针`p`,然后通过`&n`获取`n`的地址,并将其赋值给`p`。接着,可以使用`*p`来修改`n`的值。因此,选项A和D是正确的,而B和C是错误的,因为B尝试将一个整数值赋给指针,而C则尝试在未初始化的指针上使用`scanf`。 第四题涉及函数参数传递。函数`print_value`接受一个整型指针,并通过指针递增变量的值。在调用`print_value(&a)`后,`a`的值会被递增,因此输出应该是`26`,选项D是正确的。 第五题测试了指针的赋值和引用。选项A错误,因为`p2=&p1;`尝试将指针`p1`的地址赋给`p2`,而不是`m`的地址。选项B正确,因为它将`m`的地址赋给`p1`,然后将`n`的地址赋给`p2`,接着将`p2`的内容赋给`p1`所指向的变量(即`m`)。选项C正确,它将`m`的地址赋给`p1`,然后让`p1`等于`p2`,这样两者都指向`m`。选项D错误,因为它尝试将`p2`的内容赋给`*p1`,但此时`p1`尚未初始化。 第六题考察指针的表示。选项A中,`*&a`是非法的,因为`*`和`&`操作符不能同时应用于同一变量。选项B中,`&*a`等价于`a`,但`*p`是错误的,因为`*`操作符应该与`p`一起使用。选项C中,`*&p`等价于`p`,`*p`是`a`的值,`&a`是`a`的地址,所以C是正确的。选项D中,`&*p`等价于`p`,`*p`是`a`的值,`p`是`a`的地址,所以D也是正确的。 第七题涉及字符数组和字符串。选项A错误,因为`char*a="china";`声明了一个指向字符串常量的指针,而`*a="china"`试图将字符串常量赋值给字符变量,这是不允许的。选项B是正确的,因为两者的含义相同,都是初始化一个包含"china"的字符数组。选项C是正确的,因为`char*s="china";`声明了一个指针并赋值,而`s="china"`也合法,再次赋值字符串常量。选项D错误,因为字符数组`c`和`d`的大小不足以容纳整个字符串,而且字符串常量不能被修改。 第八题涉及字符串处理。字符串在C语言中以`\0`作为结束符。给定的字符串中,`\t`代表制表符,`\a`是响铃字符,`\018`是八进制表示的字符,`\0`是字符串结束符。因此,不包括空格和制表符在内的可见字符有"b", "c",加上结束符`\0`,共3个字节。所以,for循环会执行3次,选项C是正确的。 第九题测试了字符串初始化。选项A是错误的,因为它尝试在一个只分配了5个字节的空间中存储6个字符的字符串,包括结束符`\0`。选项B是正确的,因为它正确地在5个字节的空间中初始化了四个字符。选项C是错误的,因为它在没有指定数组长度的情况下尝试初始化字符串。 这些题目覆盖了C语言中的指针、地址、字符串、输入输出、函数参数传递等多个核心概念。理解和熟练掌握这些知识点对于学习和使用C语言至关重要。