1.指针的概念
地址指的是内存单元的编号,而指针 就是 地址。指针 也是一种数据类型,——指针类型。这种数据类型 是专门用来处理 地址 这种数据。
2.指针变量定义
语法:基类型 * 指针变量名
①基类型:即数据类型 ,包括整型、浮点型、字符型、数组类型、指针类型、结构体类型等等。
基类型的作用是表示该指针类型 所指向的内存空间 存放什么类型的数据。
② *
在定义时,* 表示此时定义的是一个 指针类型 的变量。
③指针变量名:符合标识符命名规则 。
eg:int * p //表示此时定义了一个指针类型的变量p
补充:指针类型
类比普通基本类型:数据类型 变量名; 如int a;//int 叫整型
int * p; // int * ---整体叫指针类型int* 含义 :①表示是一个 指针类型 ②表示指向int型数据的指针类型
3.指针变量初始化
如果指针变量没有初始化,此时是随机值 --- 野指针。
初始化可以让指针变量 有明确指向。
int a = 10;
int *p = &a; //表示把a的地址放在了p这个指针变量中
---------------------------------------------------------
int *p = NULL; //NULL 0号地址 --- 空指针
赋值:
int * p;
p = NULL;----------------------------------------------------------
int a;
int *p;
p = &a;
4.指针变量的引用
① * //指针运算符,单目运算 ,运算对象只能是指针(地址)。注意区别于定义时的 * 。
②*p // 表示访问 p所指向的 基类型的 内存空间。此时是间接访问,若通过a访问的,则是直接访问 。
③ * p运算过程:
step1: 首先拿出p中地址,到内存中定位
step2: 偏移出sizeof(基类型)大小的一块空间
step3: 将偏移出的这块空间,当做一个基类型变量来看 //*p运算完的效果如下图:
所以,*p最终运算效果 相当于就是一个基类型的变量,即*p <=> a。
补充:
注意区分 int *p 与 *p的含义,前者是表示定义了一个指针类型(int *)的变量p,需要对p进行赋值,如int a = 10;p = &a;
后者在引用时,* 是运算符,代表指针变量p所指向的变量的值。
5.指针作为参数
形参 -- 指针类型 变量 ,用来接收实参 (实参是要操作的内存空间的地址)。
实参 -- 要修改谁,就把谁的地址传过去。
注意: 要保证 空间有效被调函数中 一定要有 *p 运算 //(间接访问的操作)。
以下是简单示例:交换a和b的值
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main(void)
{
int a = 6, b = 4;
int sum = 0;
int max,min;
printf("a = %d, b = %d\n",a, b);
swap(&a, &b);
printf("a = %d, b = %d\n",a, b);
}
注意: 值传递 //只是 实参数据 赋值了形参。
地址(指针)传递 //传的是地址 --可以实现被调修改主调 。


被折叠的 条评论
为什么被折叠?



