const int **pp = &p;

本文详细解析了C++中const修饰符的作用及其在不同上下文中的含义,特别是对于多级指针的使用,帮助读者更好地理解如何利用const来确保代码的安全性和可维护性。
const int v;
const int *p = &v;
const int **pp = &p;

即*p的类型为const int*,**p的类型为const int

其实识别这种语法很简单,注意看const的位置,如果在*左边,则表示最终指向的数据为只读,多级指针亦如此。
如果*在变量名的左边,例:int **const pp;,表示pp自身为只读。
第三种情况,const不仅在*左边还在变量名左边,则表示最终指向的数据和自身都为只读,例:const int **const pp;
# 江苏省五年一贯制专转本C程序设计指针专项练习卷 **考试时间:90分钟 总分:100分** --- ## 一、单项选择题(每题2分,共20分) 1. 已知 `int a = 5, *p = &a;`,则 `*p` 的值是( ) A. a的地址 B. 5 C. p的值 D. 不确定 2. 若有定义 `int b[5] = {1,2,3,4,5}, *q = b;`,则 `*(q+2)` 的值是( ) A. 2 B. 3 C. 4 D. 6 3. 下列哪项是指针变量的正确声明?( ) A. `int *p;` B. `int p*;` C. `*int p;` D. `int p();` 4. 若 `char *str = "Hello";`,则 `*(str+1)` 的值是( ) A. 'H' B. 'e' C. 'l' D. '\0' 5. 设 `int x = 10, y = 20; int *p1 = &x, *p2 = &y;` 执行 `*p1 = *p2;` 后,x的值为( ) A. 10 B. 20 C. 地址值 D. 不变 6. 若有函数原型 `void func(int *a);`,调用时正确的形式是( ) A. `func(x);` B. `func(&x);` C. `func(*x);` D. `func(a);` 7. 下列关于空指针的说法正确的是( ) A. 空指针指向地址0 B. 可以通过空指针访问数据 C. NULL表示野指针 D. 空指针必须初始化 8. 若 `int arr[3][4];`,则 `arr` 是( ) A. 指向整型的指针 B. 指向含4个整数数组的指针 C. 整型变量 D. 二级指针 9. 表达式 `sizeof(int*)` 在32位系统中通常返回( ) A. 2 B. 4 C. 8 D. 依赖于int大小 10. 下列代码段中,可能导致野指针的是( ) A. `int *p;` B. `int *p = NULL;` C. `int *p = malloc(sizeof(int));` D. `free(p); p = NULL;` --- ## 二、填空题(每空2分,共20分) 11. 已知 `int m = 8, n = 9, *ptr = &m;` 执行 `ptr = &n;` 后,`*ptr` 的值是 ______。 12. 若 `double data[5]; double *dp = data;`,则 `dp + 1` 指向的是第 ______ 个元素。 13. 设 `char s[] = "C Language"; char *sp = s;`,要使 `sp` 指向字符 'L',应执行 `sp += ______;`。 14. 若 `int a = 100; int *p = &a;`,表达式 `&*p` 的结果等于 ______。 15. 函数 `swap(int *x, int *y)` 实现两数交换,则函数体内第一条语句通常是:`int temp = ______;`。 16. 若 `int *p = (int *)malloc(5 * sizeof(int));`,释放内存应使用语句:______。 17. 已知 `int arr[3] = {7,8,9}; int *p = arr;`,表达式 `*p++` 的值是 ______。 18. 字符串指针 `char *str = "ABC"; printf("%c", *(str+2));` 输出结果是 ______。 19. 若 `int a = 5; const int *ptr = &a;`,则 `ptr` 是指向常量的指针,不能通过 `*ptr = ___` 修改值。 20. 指针数组 `char *names[3];` 可存储最多 ______ 个字符串的首地址。 --- ## 三、判断题(每题2分,共10分,正确打“√”,错误打“×”) 21. 指针变量本身也占用内存空间。( ) 22. 数组名是一个常量指针,不可被赋值。( ) 23. 动态分配的内存未释放会导致内存泄漏。( ) 24. `int *p[5];` 表示p是一个指向5个整数的指针。( ) 25. 函数参数使用指针可以实现多值返回。( ) --- ## 四、程序阅读题(每题6分,共30分) 26. 阅读下列程序,写出输出结果: ```c #include <stdio.h> int main() { int a = 5, b = 10; int *p1 = &a, *p2 = &b; *p1 = *p1 + *p2; *p2 = *p1 - *p2; *p1 = *p1 - *p2; printf("a=%d, b=%d\n", a, b); return 0; } ``` 27. 写出以下程序的输出: ```c #include <stdio.h> int main() { char str[] = "hello"; char *p = str; while (*p != '\0') { printf("%c", *p - 32); p++; } return 0; } ``` 28. 分析以下代码的输出: ```c #include <stdio.h> int main() { int arr[] = {10, 20, 30, 40}; int *p = arr; printf("%d, %d", *(p+1), *p+1); return 0; } ``` 29. 给出下列程序运行结果: ```c #include <stdio.h> void func(int *x) { *x = *x * 2; } int main() { int val = 7; func(&val); printf("%d", val); return 0; } ``` 30. 写出输出结果: ```c #include <stdio.h> int main() { int a = 15; int *p = &a; int **pp = &p; printf("%d", **pp); return 0; } ``` --- ## 五、编程题(每题10分,共20分) 31. 编写函数 `void reverseArray(int *arr, int n)`,利用指针将长度为n的整型数组逆序排列。 示例:输入 `[1,2,3,4,5]`,输出 `[5,4,3,2,1]`。 32. 编写一个函数 `int countChar(char *str, char ch)`,使用指针统计字符串 `str` 中字符 `ch` 出现的次数。 --- 生成一份详细答案解析,要有步骤,按原格式输出
最新发布
11-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值