指针和数组试题解析(4)字符数组部分续集

举报
念君思宁 发表于 2023/02/14 21:32:42 2023/02/14
【摘要】 指针和数组试题解析(4)字符数组部分续集

对于指针和数组的关系!想必到目前为止,大家都已经了解差不多了!即有指针数组,数组指针,还有函数指针数组……一系列复杂关系!所以,笔者吸取学长经验,私底下窃取了一些材料,再加上仔细地思考分析,所以,决定系统的发一套指针和数组试题解析供大家分析理解!!虽然内容不是很多,但是凝聚下来的便都是精华!也是笔者精心打造,请各位老铁耐心欣赏一下!!顺便动用一下发财的小手,一键三连呀!!

言归正传,请各位老铁仔细欣赏笔者的文章!!!

谨记:对于字符数组,我们要跟字符串区分开!!
下面进入笔者的指针和数组试题解析部分!

 
#include <stdio.h>
int main()
{
	const char* p = "abcdef";
 
	printf("%d\n", sizeof(p));    //4
	printf("%d\n", sizeof(p+1));   //4
	printf("%d\n", sizeof(*p));   //1
	printf("%d\n", sizeof(p[0]));  //1
	printf("%d\n", sizeof(&p));  //4
	printf("%d\n", sizeof(&p+1));   //4
	printf("%d\n", sizeof(&p[0]+1));   //4
	
	return 0;
}

注意,笔者的代码是在vs2022 的x86环境下进行演示的!请注意细节,若是在vs2022的x64环境下,将会出现不一样的结果!但那个结果也是正确的!

 

 若是有老铁能直接看懂,并且能够跟答案对上号,那么这篇博客,这位老铁就没有看的必要了,下面内容主要是对上面的代码的讲解!并不做其他的内容!但若是有兴趣,可以进一步欣赏!
下面进入讲解部分
对于: char* p = "abcdef";  而言:使用  :const char* p = "abcdef";确实比较好!因为字符串:“abcdef"是常量,不可以修改,所以用const 修饰,没有什么大问题!

而”abcdef"作为字符串,表达式的值就是a的地址!因此将a的地址放在p里面去,而“abcdef"是字符串常量,若要让p进行维护,p可能会对字符串”abcdef"进行更改!但是由于常量字符串不能被修改!而p却是有能力(可以)去修改“abcdef",所以前面加const 显得更加严谨!!!

 

1.sizeof(p)  : p是一个指针变量,是用来存放地址的!指针(地址)的大小就是4/8个字节!

2.sizeof(p+1)  : p里面存放的是地址!是char*  类型的指针!p+1指:char* 的指针+1,但之后还是个地址!是地址就是4/8个字节!

3.sizeof(*p)  : p为char* 类型的指针,对其解引用,只能访问1个字节!

4. sizeof(p[0])  : p[0]相当于:*(p+0),就是第一个元素的大小,1个字节!

     *p相当于*(p+0),也相当于:p[0]

5. sizeof(&p)  : &p取出的是整个数组的地址!但是整个数组的地址也是地址!是地址就是4/8个字节!

6.sizeof(&p+1)  : &p 是去除数组首元素的地址,而&p+1跳出整个数组,但是仍然是数组:4/8个字节!

7.sizeof(&p[0]+1)  : &p[0] 取出的是数组首元素的地址!而&p[0]+1 则是往后走一个字节,指的是数组第二个元素的地址!仍然为:4/8个字节!

上述代码的运行结果为:

 本篇文章就到此结束!有不同疑问,请及时与笔者进行联系!!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。