C语言学习:指针专题与练习

版权申诉
0 下载量 193 浏览量 更新于2024-07-08 收藏 132KB PDF 举报
"C语言习题集合(指针)" 在C语言中,指针是一个非常重要的概念,它允许我们直接操作内存地址,实现高效的数据处理和复杂的程序设计。本习题集主要关注指针相关的知识,涵盖了选择题的形式,旨在帮助学习者深入理解和应用指针。 1. 非法赋值语句的识别: 在C语言中,指针可以被赋值为其他指针的值,或者通过解引用操作赋值给它所指向的变量。但指针不能直接赋值为整型变量,因为它们代表的是内存地址。因此,选项D `q=a;` 是非法的,因为`q`是一个指针,而`a`是一个整数。 2. 指针解引用与输出: `*b` 表示`b`所指向的变量的值,因此`printf("%d\n", *b);`会输出`b`指向的变量的值,即`a`的值。如果`a`被初始化为511,那么输出结果将是511,所以正确答案是D。 3. 赋值语句的正确性: A选项`a=*p1+*p2;`是合法的,因为它将两个指针所指向的变量的值相加并赋给`a`。 B选项`p1=a;`是非法的,因为`p1`是一个指针,而`a`是一个整数,不能将整数赋值给指针。 C选项`p1=p2;`是合法的,允许指针之间的赋值。 D选项`a=*p1*(*p2);`也是合法的,它将两个指针所指向的变量的值相乘并赋给`a`。 4. 变量的指针含义: 变量的指针是指该变量的地址,而非其值、名字或标志。因此,正确答案是B。 5. 从键盘读取整数: 使用`scanf()`函数读取变量的值时,必须传递变量的地址。因此,正确读取`a`、`b`、`c`的语句是C选项`scanf("%d%d%d", &a, &b, &c);`。 6. 指针变量的声明与赋值: 语句(1)`int *p = &a;`声明了一个指向整型变量的指针`p`,并将其初始化为`a`的地址。语句(2)`*p = a;`将`a`的值赋给`p`所指向的变量。因此,正确解释是D选项。 7. 地址相关的表达式: A选项中`a`是变量名,不是地址;B选项`&*a`是错误的,因为`*a`已经解引用了,不是地址;C选项中`*&p`是错误的,`*p`是`p`所指向的变量的值。只有D选项`&a, &*p, p`全部代表地址,其中`&a`是`a`的地址,`&*p`是`p`所指向的变量的地址(等同于`a`的地址),`p`是`a`的地址的别名。 8. 建立存储结构: 如果需要建立如图所示的存储结构,并已定义`double *p, x=0.2345;`,正确的赋值语句是B选项`p = &x;`,这使得`p`指向`x`的地址。 9. 正确的指针操作: 在C语言中,指针需要先被初始化为某个变量的地址,然后才能通过`*p`访问或修改其指向的变量。正确的程序段是A选项`p = &b;`,这将`p`设置为指向`b`的地址,后续可以使用`*p`来访问或修改`b`的值。 通过这些习题,学习者可以掌握指针的基本用法,包括指针的声明、赋值、解引用以及通过指针访问和修改变量的值。此外,还需要理解指针作为地址的概念,以及如何使用指针进行内存操作。