C语言:关于指针学习以及理解
文章目录
一、什么是指针
首先,指针是一种数据类型,使用它定义的变量叫指针变量。指针变量是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址,指针的值是一个地址。
指针的四个要素?:指针的类型、指针所指向的类型、指针的值 (指针所指向的内存区,即指向的地址) 、指针本身所占据的内存区(指针本身的地址)。
(根据上图)举个例子:
int a=111;
int *p = &a;
上面两句语句中可得出:
p 是指针变量
指针类型: p 是一个 int 类型的指针
指向类型: p 指向一个 int 类型的数据 a
指针的值: p 的值是0x30009 ( 即 p 指向的地址是0x30009 )
指针的地址:p 所占据的内存区 (即 p 本身的地址为0x30001)
所以要注意:指针的值 和 指针的地址 不是同一个东西,一个代表 p ,另一个代表&p 。
二、为什么使用指针、什么情况下使用指针
1、函数之间无法通过传参共享变量。
函数的形参变量属于被调用于者,实参属于调用者,函数之间的变量名字空间相互独立是可以重名的,函数之间的数据传递都是值传递(赋值、内存拷贝)。
2、使用指针可以优化函数之间传参的效率。(无需传递数组中所有参数,直接传递数组首地址)
3、堆内存无法与标识符建立联系,只能配合指针使用。
三、如何使用指针
? 定义:类型 * 变量名p;
1、指针变量与普通变量使用方法有很大区别,一般以 p 结尾,与普通变量区分开。
2、* 表示此变量是指针变量,一个 * 只能定义出一个指针变量,不能连续定义。
int* p1,p2,p3; // p1是指针,p2,p3是int类型变量
int *p1,*p2,*p3; // 三个指针变量
3、类型表示的是存储是什么类型变量的地址,它决定当通过地址访问这块内存时访问的字节数。
4、指针变量的默认值也是不确定,一般初始化为NULL(空指针)。
? 赋值操作:指针变量 = 地址
栈地址赋值:
int num = 0;
int* p = NULL;
p