指针理解

本文详细解析了sizeof运算符和strlen函数的区别与用法,通过一维数组、字符数组、字符串数组及二维数组的实例,阐述了它们在不同场景下如何计算数组或字符串的长度,揭示了数组、指针与地址之间的微妙关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说明sizeof的作用:sizeof是运算符,分配的数组实际所占的内存空间大小,不受里面存储内容

在一维数组中

//一维数组
int a[] = {1,2,3,4};

求sizeof
a:数组的空间大小
a+0: 相当于a[0],即指向第一个元素的指针 (32位系统指针都是4字节)
*a:数组首元素地址的解引用
a+1:将指针指向下一个元素
&a:数组指针,数组的地址就是数组的首地址
&a+1:跨越了一个数组的长度
&a[0]:指向第一个元素的指针
&a[0] + 1:指向a[1]地址的指针

在字符数组中

//字符数组
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };

求sizeof
arr:数组的长度 6
arr+0:指向第一个元素的指针
arr[1]:第二个字符的长度
&arr:数组指针,指向arr数组的首地址,返回值为char
&arr+1:跨越一个数组长度的指针
&arr[0]+1:取arr[1]的地址的指针

字符串数组

//字符串数组
char arr[] = "abcdef";

求sizeof
arr:整个数组长度,包括’\0’ 7
*arr:arr[0]字符长度(‘a’)

若求其strlen(引进string.h头文件
而strlen是函数,计算字符串的长度,以’\0’为字符串结束标志

strlen(arr):6
strlen(*arr):未定义行为

指向字符串的指针

char*p = "abcdef";

求sizeof
p;指针长度
*p:对p进行解引用,指向的是a
&p+1:跨越一个数组的指针
&p[0]+1:指向b的指针

strlen§:6
strlen(p + 1):5 从第二个元素算起

二维数组

int a[3][4] = { 0 };

a:12个元素4个字节=48
a[0]:以a[0][0]为首的一维数组 即第一行元素长度 4
4 = 16
a[0]+1:偏移一个单位,取a[0][1]
*(a[0]+1):相当于p[1]
a+1:a[1]地址的长度
*(a + 1):a[1]的数值 16
&a[0] + 1:指向a[1][0]的指针
*(&a[0] + 1):a[1][0]的数值
*a:以a[0]为首的一维数组
a[3]:以a[3][0]为首的一维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值