C语言指针练习题集

需积分: 19 5 下载量 117 浏览量 更新于2024-08-27 收藏 35KB DOCX 举报
"C指针练习.docx" C指针是C语言中的一个重要概念,它允许程序员直接操作内存地址,提供了高效的数据操作和管理能力。针对新手的指针练习题可以帮助理解并熟练掌握这一核心概念。 1. 在选择题中,选项A "a,point,*&a" 是一组代表地址的选项。因为`a`是一个整型变量的名称,代表其存储地址;`point`是一个指向整型变量的指针,同样代表地址;`*&a`是一个解引用操作,它会给出`a`的值,而不是地址,所以不是地址选项。 2. 代码段 "int*p,m=5,n; 以下正确的程序段是:p=&n;" 显示正确赋值指针`p`指向变量`n`的地址。其余选项或语法错误,或未初始化指针,或试图对未初始化的指针解引用。 3. 错误的`scanf`调用 "Scanf(“%d”,*p);" 的原因在于`*p`表示的是变量`a`的值,而不是变量`a`的地址,因此应使用`&a`来传递地址给`scanf`。 4. 下面的程序: ```c int m=1,n=2,*p=&m,*q=&n,*r; r=p; p=q; q=r; printf("%d,%d,%d,%d,\n",m,n,*p,*q); ``` 执行后,指针`p`和`q`发生了交换,但`r`仍然指向`m`的地址,因此输出结果为 `1,2,2,1`。 5. 以下程序: ```c int a=1,b=3,c=5; int *p1=&a, *p2=&b, *p=&c; *p=*p1*(p2); printf("%d\n",c); ``` 执行后,`c`的值被设置为`a`和`b`的乘积,即`3`。 6. 当执行 `A=p1==&m;` 后,`A`的值取决于`p1`是否等于`&m`。在这里,`p1`最初指向`k`,而`&m`是`m`的地址,两者不等,因此`A`的值为`0`。 7. 在16位系统上,定义 `inta[]={10,20,30},*p=&a;`,执行`p++`后,`p`向高地址移动了一个存储单元,即2个字节(因为一个整型通常占2个字节),所以选项B和C是错误的。`p`与`a+1`等价,意味着它现在指向数组中的第二个元素。 8. 代码段 `int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];` 中,`b`的值是`p`所指数组位置的第五个元素,即`8`。 9. 对于定义 `int a[5],*p=a;`,正确引用数组`a`的元素包括 `*p`(第一个元素),`p[0]`(第一个元素),`p[1]`(第二个元素),等等。`&a[0]`等价于`a`或`&p[0]`,都是数组的第一个元素的地址。`*(&a[2]+1)`则表示数组的第三个元素。 通过这些练习题,初学者可以深入理解指针的概念,包括指针的赋值、解引用、数组和指针的关系以及指针算术操作。熟悉这些基础知识对于理解和编写更复杂的C程序至关重要。