c语言——指针数组和数组指针

目录

首先

*这个符号怎么用

指针的初始化

指针和数组

 指针数组

 数组指针


首先

指针是一种存放地址的变量,而地址的本质其实也就是一串数字,指针变量的作用就是把表示地址的这串数字保存下来。

一般情况下,想要获得地址就使用取地址符&,或者使用指针变量。

  1. 指针变量都是占8个字节,不论是什么数据类型的指针。(不同系统和编译器可能不一样)
     

*这个符号怎么用

 初学者很容易把这个*的作用搞混。*在不同的位置出现其实有不同的作用。下面给大家具体讲解🤺

int a=9;
int *pa=&a;
/*这里的 * 作用是取地址
右边利用&把a的地址取出来,赋值给左边的指针变量
其实pa只是一个标识符,换成随便什么都行*/

printf("%d",*pa);
/*这里的 * 作用是取值
* 把地址pa里储存的变量a的值取出来*/

指针的初始化

指针代表一个地址,指向某一个变量。正因如此,如果定义了一个野指针将会是一件危险的事,因为这个指针可能指向你电脑里的某一个未知地方,就像这样了👇🏻

d32229e7623e4514ab670187077f595f.png

那么如何避免这种情况发生呢?下面来举🌰一些简单的初始化方式

第一种:初始化的时候就赋予一个明确的值
int a=9;
int *x=&a;

第二种:初始化赋值为无
int *y=NULL;
int *z=0;

指针和数组

指针和数组算得上亲戚。指针变量代表地址,而数组名其实就代表着数组中第一个元素的地址。

int a[5];
a是数组名,代表着a[0]的地址
这个数组中任意一个单独的元素(如a[3])都是一个变量

一个数组中元素依次排列,相应的,它们的地址也是紧挨着的。

4574f2c12ae3402a8cdd14e7e1d92093.png16e4521ecb804b3aaceb1a9881f1fedb.png

  字符只占一个字节,因此相邻的元素地址相差为1;整型变量占4个字节,所以相邻的元素地址相差为4。

假如我们给数组的指针+1或者-1会怎样呢?

下面我们来看一个相关方法👇🏻

指针法:通过给数组的指针作+-,用于切换到上一个或下一个元素(这不仅仅是简单的给地址数值的大小+-),再通过*取该指针的值,完成间接访问。

举一个生动的栗子

72c5137f2c14449d8a604e4985aa95e8.png

 look! 给地址+1不意味着给地址代表的数字+1,而是从m[0]切换到了m[1]。

 指针数组

6605727bba924ece94cea81672497534.png
由于【】的优先级高于*,所以这是一个指针数组,是一个真正的数组,它的每一个元素都代表一个变量地址。

 数组指针

21de127e162f48149f8fb470d5928751.png

这是数组指针,一个真正的指针。&x是x数组的整体,不再是该数组第一个元素的位置 。

  • 指针数组和数组指针,不论从名字还是形式上区分都有难度,我建议从运算符优先级上做区分。而它们而这本质的不同就是,一个是指针,一个是数组。

就酱,拜拜~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值