指针和数组试题解析(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个字节!

扫描二维码关注公众号,回复: 14522533 查看本文章

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个字节!

上述代码的运行结果为:

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

猜你喜欢

转载自blog.csdn.net/weixin_64308540/article/details/126917403