//------------------------------指针变量
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;
//----------------野指针 //只是定义了一个指针变量,没有初始化
NULL // 关键字 空地址 0x0
int *p; //
*p = 10;
//-------------------------指针为什么要区分类型 一个指针变量所占用的内存空间是固定的。
虽然所有的指针都只占8个字节,但不同类型的变量却占不同的字节数。
结论:"定义什么类型的指针就应该指向什么类型的变量。"
int * ---> 指向int类型变量的指针
char *
double *
//----------------------指针常见的应用场景
1)在被调函数中可以修改主调函数中变量的值
编写一个函数,在这个函数修改主函数中一个变量的值
2)函数返回多个值(看起来)
结合指针 用 一个函数实现 加减乘除
num1 ,num2
一个函数 ----> 主函数中 输出 +-*/ 的结果
//--------------------函数实现两变量交换
int num1 = 10,num2 = 20;
函数中
主函数中打印 num1 : 20, num2 : 10
|