9.11日听课观后感 指针数组与数组指针

        指针进阶内容

指针的大小是4个字节或者8个字节  ,主要看系统类型,当为32位机器时为4个字节   64位为8个字节

我们口语上的指针就是所谓的指针变量,里面存储的其实是地址 

指针的类型决定了,他们在访问地址时的权限,比如char *一次只能访问一个字节的内存 ,而int *一次性能访问  4个字节  double 为8个字节的内存  

%c 
是打印字符,%s是打印字符串
 

%s其实就是打印到\0就不打印了

本质上这种写法存的还是  存的字符串首字符的地址

但是弊端就是不能修改  如果修改会发生错误

因为当你创建出这个指针时,他就被放到到只读区,而无法被修改。因此在创建这种指针变量时最好给前面加一个const 就可以避免这种弊端了   这样可以增加代码的可读性  

下面为一个经典例题  

为什么会出现上面的地址是相等的  而下面的字符串是不相等的呢?这是因为 这还是涉及到一个东西

上面那个属于常量字符串 ,在创建时不会重复创建 ,因此其实p1 p2  这两个指针变量都是保存的这个常量字符串的首字符 a的地址 ,故他俩是相等的

下面那两个字符串是因为字符串在创建时就在内存中申请了空间,且这两个空间地址不同,所以不相等

-------------------------------------指针数组

指针数组主语为数组,所以这是一个数组,里面存放的是指针 

int * arr[]   可以类比一下整形数组  int arr[] 也是说明存放的是整形

int *说明存放的是地址

指针数组模拟二维数组

虽然可以模拟出二维数组的形式,但是本质上不是二维数组 ,因为二维数组在内存中i是连续存放的

所以说 这就是指针数组的用途

----------------------------------------------------数组指针

主语为指针,实质上,数组指针的本质为指针

要怎么用呢/?,必须将数组名再次进行。理解一下,加深印象

数组名为首元素地址
有两种特殊情况,这两种情况说明 arr不一定为首元素地址
比如 sizeof (数组名)
&数组名 
这两种情况表达的是整个数组

必须是单独 sizeof 单独放一个数组名 ,这个时候才表示整个数组,。计算的是整个数组的大小

数组指针用来存放数组的地址  比如  &arr

数组指针是用来存放整个数组的地址
 

数组去掉名字,剩下的就是 类型

数组指针的形式为  int  (*arr)[];  指针数组的形式是  int *arr  [];

注意区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值