- 一、指针与地址
- 题目
- 分析
- 答案
- 二、const修饰字符串
- 例题
- 分析
- 答案
- 三、 升级一下第二题
- 正确答案
- 总结
一、指针与地址 题目
int a=6 ; int *p=&a; int **p1=&p; int &p2=p; 请问一下结果中值为6的是? A:&p B:**p1 C:*p2 D:*p1分析
如何理解 int a =6
这句代码的意思是在内存中开辟0x3848921这块地址大小为int的空间来存放一个int型数据6。并给这段空间取别名为a
因此,a表示为这段空间的内容 6, &a表示该段空间的起始地址0x3848921
如何理解int *p =&a?
int *p=&a;其实表示的意思是int *p; p=&a,含义就是p指向a
其含义表示为在内存中开辟了0x3256567开始的大小为8byte的空间来存放a的地址
如何理解int **p1=&p
其表示的是int **p1; p1=&p
也就是说p1中存放的是p的地址
如何理解 int &p2==p?
这个表述是错误的,因为在内存中我们并没有申明一块空间为p2呀,那么如何进行&p2(取p2的地址)呢?
分析A选项:
p中存放的是a的地址,而&p表示的是取p这块空间的地址,所以答案肯定不是6,而是0x325657
分析B选项:
p1中存放的是p的地址,那么*p1表示的是p1中存放的地址(p的地址)的空间中存放的内容即a的地址。那么 **p1表示的就是p中存放的地址(a的地址)的内容即6。因此B正确
分析C选项:
p2,根本没有声明p2,怎么p2呢?
分析D选项:
p1,表示的是p1所指向的地址内容,p1中存放的地址是p的地址,那么p的内容就是a的地址,那么p1就是a的地址 0x3848921
因此答案是B **p1
二、const修饰字符串 例题char* const strA="hello world"; const char* strB="hello world"; 下面操作正确的是 A:strA[0]='H'; B:strB[0]='H'; C:strA="123"; D:strB="123";分析
char * const strA="hello world"
表示的是strA所指向的空间是"hello world"字符常量,且strA所指的地址无法改变
const char* strB="hello world"
表示的是strB所指向的空间是"hello world"字符常量,且strB所指的地址是可以改变的但是其内容可以改变
选择D
三、 升级一下第二题char str[]="hello world"; char* const strA=str; const char* strB=str; 下面操作正确的是 A:strA[0]='H'; B:strB[0]='H'; C:strA="123"; D:strB="123";正确答案
AD
总结关于最后一题,大佬可以自行跳过,有经过该文章明白其知识点的朋友欢迎大家评论区分析



