指针进阶版

fcdd922f7d0c4081affce2352587f038.jpg

 如果将*p赋值W,则程序会崩溃,因为“abcdef”为常量字符串。加个const以后,谁想改都不可能,因为后面是常量字符串,加个const保证了代码的健壮性。

arr[1],arr[2]两个数组在定义时就已经在内存中开辟了空间,即使两个数组存储的内容一样,但是由于两个数组地址各不相同,所以arr[1]不等于arr[2]。

cc13f52a51d04a8c8da0570c2eb22085.jpg

当为指针时,则多个指针可以指向同一地址,并且“abcdef” 在创建时只需要创建一个就可以了保证了内存的节省。ae1089c534704d9d80660929ec910b21.jpg

 

 用()括住指针,防止[]的优先级干扰

 

3e9766fc2269488ca2a142cf469852c6.jpg

7e395b4d1a254c97b257cca263e7b8dc.jpg 

 

数组指针一般不这么用。一般用在二维数组及以上b2d4dfd2eb4041e880b1368cffd89147.jpg

 访问以arr为起始地址下标为i的元素。

 

c4b994b30f4d44889a21f42a53598495.jpg

b7173e9a38b84174a77bfdd04d77a0b9.jpg 

strlen()参数部分需要的是一个地址,如果不是地址,那么将会将其转换为ascll码值,然后可能从该ascll码值所对应的地址开始,逐个往后数,直到找到“/0”为止,显然这样找程序是会崩溃的,所以这样的代码是一种错误的代码,相当于非法访问内存了。

 

98d9a8c2264343019ce9c38de2fafa0a.jpg

 

对于strlen(&arr),运行时会报错,原因是类型不兼容(类型不相同):如果要存&arr那得是一个数组指针,因为首元素是字符所以为char,且是“‘数组’指针”所以,类型为char(*)[7],假设变量名称为p,所以char(*p)[7]=&arr,但是对于strlen来说,参数的类型应该为const char*。所以两个类型是不兼容的,所以会报错,但是可以运行

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值