数组和指针的一些易忽视点

文章详细阐述了数组名在sizeof运算中表示整个数组大小,而取地址运算符(&)对数组名的应用。同时,讨论了指针类型对于解引用操作的影响,不同类型的指针在移动和访问内存时的差异。此外,提到了指针运算中的步长问题以及使用assert函数确保指针有效性的实践。
摘要由CSDN通过智能技术生成

一、数组名是数组首元素的地址,但有两个例外:

  1. sizeof(数组名),计算的是整个数组的大小、单位是字节,sizeof内部单独放一个数组名,数组名表示整个数组;

  1. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组;

如图:在数组名未加1前,arr、&arr[0]、&arr所表示的地址大小一样,但是当+1后发现&arr地址却增加了36(数组含有9个字符,int型每个字符占4个字节),说明&arr表示的是整个数组地址。

二、指针

①指针类型的意义

1、指针类型决定了指针进行解引用操作(即*)的时候,能够访问空间的大小

如:int* p:*p能够访问4个字节

char* p:*p能够访问1个字节

double* p:*p能够访问8个字节

虽说都能存放4个字节大小的地址(32位运行情况下)如上图,但在解引用更改数据时,则结果不同;

图一

图二

如图一和图二可知,此时int型指针可访问4个字节

图三

图四

由图三图四可知,char型指针可访问1个字节。

2、指针类型同样决定了指针走一步走多长

如:int* p;p+1-----》向后走4个字节;

char* p;p+1-----》向后走1个字节;

②指针运算

指针-指针----------》等于指针中间元素的个数;

如int* arr[5]={1,2,3,4,5};

&arr[4]-&arr[0]=5;

③指针中,常用assert()来保证代码中指针的有效性(用于判断指针是否为空)

char str[]="abd";

assert(str!=NULL);

一些学习过程中了解的,有任何希望大家指出。谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值