1、指针的作用:
- 1、表示一些复杂的数据结构
- 2、快速传递数据(传参结构体中和函数处理数组的时候)
- 3、使函数返回一个以上的值
- 4、能直接访问硬件(因为它里面存的是硬件上的一个地址)
- 5、能够方便的处理字符串
- 6、是理解面向对象语言中引用的基础
总结;指针是c语言的灵魂
2、指针的定义:
地址:内存单元的编号(从零开始的非负整数)范围:4G【0--4G-1】,(即32位二进制或8位16进制)
指针:
指针与指针变量:
- 指针就是地址,地址就是指针
- 地址就是内存单元的编号
- 指针变量是一个变量,什么样的变量呢?一个存放地址的变量
- 指针与指针变量是两个不同的概念可以换一句话说(地址和地址变量)
但是注意:通常我们或者程序员叙述时会把指针变量简称为指针,实际上含义是不同的
指针的本质:是一个操作受限的非负整数(指针不能加、乘、除只能相减(即可以相减得出两个房间号中间隔了多少内存))
指针的分类:
3、基本类型指针
include<stdio.h>
//指针变量就是地址变量即能存放其他变量的地址
int main(void)
{
int* p; //p是变量的名字(p是指针变量即p能存放整形变量的地址) int*表示变量存放的是int类型变量的地址
/*
1、int* p 不表示定义了一个名字叫做*p的变量
2、int* p 应该这样理解:p是变量名,p变量的类型为 int*类型(既存放int变量地址的类型)
3、所谓int*类型 实际就是存放int变量地址的类型
*/
int i = 10;
p = &i;
/*
1、p保存了i的地址,因此p指向i。
2、p不是i,i也不是p,更准确的说修改p的值不会影响i的值,修改i的值也不会影响p的值,但是*p是以指针变量p中
存储的内容为地址(即变量i的地址)的变量的值(即变量i)
3、如果一个指针变量指向了某个普通变量,则 *指针变量 就完全等同于 普通变量
例如:
如果p是个指针变量,并且p存放了普通变量i的地址,则p指向了普通变量i,于是*p 就完全等同于 i,
或者 说在所有出现*p的地方都可以替换成i,在所有出现i的地方都可以替换成*p,*p就是以p的
内容位地址的变量的值
*/
// p = i;//error,因为类型不一致,p只能存放int类型变量的地址,不能存放int类型变量的值
// p=55;//error,类型不一致
}
附录:*的含义
1、乘法
2、定义指针变量
int* p;
//定义了一个名字叫p的指针变量,int*表示 变量p的类型(即只能存整形变量的地址)
3、指针的运算(又叫星(*)运算或者解引用运算)
该运算法放在定义好的指针变量的前面
如果p是一个已经定义好的指针变量 则*p表示 以p的内容为地址的变量的值【重点理解并记死这一句话】
如何通过被调函数修改主调函数中普通变量的值?
1、实参必须为该普通变量的地址