栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

一文搞定C语言指针与地址

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文搞定C语言指针与地址

文章目录
  • 一、指针与地址
    • 题目
    • 分析
    • 答案
  • 二、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

总结

关于最后一题,大佬可以自行跳过,有经过该文章明白其知识点的朋友欢迎大家评论区分析

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948117.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号