//-------------------------------指针
能存地址的数据类型 ----> 地址
使用指针好处
a.为函数提供修改调用变量的灵活手段;
b.让函数有多个返回值
c.可以改善某些子程序的效率
变量的存取方式 存取方式分为两种: 直接存取 和 间接存取
# 直接存取:变量的赋值和取值(通过变量名进行存取值)
int num = 100;
num = 200;
# 间接存取:通过指针(地址)间接操作完成。
int num = 100;
int *p = # //p指向了 num 的地址
*p = 99;
//------------------------------指针变量
1、指针变量 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。
因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
注意: 严格意义上说,指针是一个地址,是一个常量指针变量是存放一个地址,是一个变量。
定义一个指针变量
指针变量 ----> 变量 ----> 存放地址的变量
int a = 10; //定义一个整型变量 变量名为 a a的值为10
int *p = &a; // 定义了一个指针变量,里面存放的是a的地址
/*
当在定义的时候 int *p = &a; * 类型说明符 说明我定义的这个变量是一个指针变量
在使用的时候 *p = 10; * 它是一个操作符 获取指针变量p指向的地址所对应的内容
*/
//
int a = 998;
# 指针变量 int *p = &a;
&p : p 变量名 &p 指针变量的地址
p : p指针变量 里面存放的就是地址 a的地址
*p : p这个指针变量指向地址(a的地址)所对应的内容 998
a : 整型变量
//-----------------------------初始化与引用
//定义的同时进行初始化
int a = 10; //定义了一个int类型的变量
int *p = &a; //定义了一个int *类型的指针变量 指向的就是a的地址
*p ---> 指向的地址所对应的内容
// 先定义后初始化
int b = 5;
int *p1; // 仅仅只是定义
p1 = &b; // 对指针变量进行初始化
//定义了一个指针变量
int *p = &a;
int *p1 = p;
*p = 10;
printf("%d",*p); p指向的地址所对应的内容
注意点
1、多个指针变量可以指向同一个地址 int a = 5;
2、指针的指向是可以改变的
3、指针没有初始化里面是一个垃圾值(0x0),这时候我们这是一个野指针, 如果操作一个野指针
1)可能会导致程序崩溃
2)访问你不该访问数据 "所以指针必须初始化才可以访问其所指向存储区域"
//--------两个有关的运算符:
& :取地址运算符;
* :指针运算符(或称"间接访问" 运算符)。
int *p = &a;
*&a ----> a
&变量名;
*指针变量名
关于*的使用注意:
1)在定义变量的时候 * 是一个类型说明符,说明定义的这个变量是一个指针变量
int a = 5;
int *p = &a;
int *p1 = p;
2)在不是定义变量的时候 *是一个操作符,访问指针所指向存储空间的内容
int x = *p;
|