目录
首先
指针是一种存放地址的变量,而地址的本质其实也就是一串数字,指针变量的作用就是把表示地址的这串数字保存下来。
一般情况下,想要获得地址就使用取地址符&,或者使用指针变量。
- 指针变量都是占8个字节,不论是什么数据类型的指针。(不同系统和编译器可能不一样)
*这个符号怎么用
初学者很容易把这个*的作用搞混。*在不同的位置出现其实有不同的作用。下面给大家具体讲解🤺
int a=9;
int *pa=&a;
/*这里的 * 作用是取地址
右边利用&把a的地址取出来,赋值给左边的指针变量
其实pa只是一个标识符,换成随便什么都行*/
printf("%d",*pa);
/*这里的 * 作用是取值
* 把地址pa里储存的变量a的值取出来*/
指针的初始化
指针代表一个地址,指向某一个变量。正因如此,如果定义了一个野指针将会是一件危险的事,因为这个指针可能指向你电脑里的某一个未知地方,就像这样了👇🏻
那么如何避免这种情况发生呢?下面来举🌰一些简单的初始化方式
第一种:初始化的时候就赋予一个明确的值
int a=9;
int *x=&a;
第二种:初始化赋值为无
int *y=NULL;
int *z=0;
指针和数组
指针和数组算得上亲戚。指针变量代表地址,而数组名其实就代表着数组中第一个元素的地址。
int a[5]; a是数组名,代表着a[0]的地址 这个数组中任意一个单独的元素(如a[3])都是一个变量
一个数组中元素依次排列,相应的,它们的地址也是紧挨着的。
字符只占一个字节,因此相邻的元素地址相差为1;整型变量占4个字节,所以相邻的元素地址相差为4。
假如我们给数组的指针+1或者-1会怎样呢?
下面我们来看一个相关方法👇🏻
指针法:通过给数组的指针作+-,用于切换到上一个或下一个元素(这不仅仅是简单的给地址数值的大小+-),再通过*取该指针的值,完成间接访问。
举一个生动的栗子
look! 给地址+1不意味着给地址代表的数字+1,而是从m[0]切换到了m[1]。
指针数组
由于【】的优先级高于*,所以这是一个指针数组,是一个真正的数组,它的每一个元素都代表一个变量地址。数组指针
这是数组指针,一个真正的指针。&x是x数组的整体,不再是该数组第一个元素的位置 。
- 指针数组和数组指针,不论从名字还是形式上区分都有难度,我建议从运算符优先级上做区分。而它们而这本质的不同就是,一个是指针,一个是数组。
就酱,拜拜~