指针
- 指针变量
- 指针变量和普通变量一样,都是用来保存数据的
- 指针变量只能保存内存地址不能保存其他的值
- 指针变量就是专门用来保存内存地址的变量
定义格式
- 数据类型 *变量名称
int *p; //定义一个指针变量
- 注意点
- 所有的指针变量占用的内存大小都是一样的
- 32位的编译器中占用4个字符
- 64位的编译器中占用8个字符
- 只要一个变量中存储了另外一个变量的内存地址, 那么我们就说这个变量指向了另外一个变量
- 只要一个变量中存储了另外一个变量的内存地址, 那么我们就可以根据这个内存地址找到另外一个变量的内存
- 从而操作那一块内存
#include <stdio.h>
int main()
{
//定义一个变量num
int num = 6;
//定义一个指针变量*p
int *p;
p = # // 让*P 的值等于变量num的内存地址(&num)
//打印变量num的内存地址
printf("&num = %p\n",&num); //&num = 0028FEBC
//打印指针变量*P 的值
printf("p = %p\n",p); // p = 0028FEBC
p和普通变量一样, 代表取出p中存储的值
//打印指针变量*p的地址
printf("&p = %p\n",&p); // &p = 0028FEB8
&p和普通&变量也一样, 代表取出p自己的内存地址
return 0;
}
原理如图
指针变量的简单应用
#include <stdio.h>
int main()
{
int num = 6;
printf("num = %i\n",num); // num = 6
int *p = #
*p = 4; //*p 代表访问储存的内存空间
printf("num = %i\n",num); // num = 4
return 0;
}
注意点2
1. 指针只能保存地址,不能保存其他的值
int *p = 666; // 企业开发千万不要这样写 错误的
float num = 3.14;
int *p = # // 正确的
2. 一个变量可以被多个指针指向
int num = 9;
int *p1;
int *p2;
p1 = #
p2 = #
*p1 = 668;
*p2 = 668;
printf("%i\n" , *p1 ); // *p1 = 668
printf("%i\n" , *p2 ); // *p2 = 668
3. 指针的指向可以改变
#include <stdio.h>
int main()
{
int num = 9;
int *p = #
int value = 666;
p = &value; //修改了 p中的内存空间地址为 value的内存地址
printf("*p = %i\n",*p); // p = 666
return 0;
}
4. 定义指针变量时前面的数据类型,必须和将来要保存的变量前面的数据类型一致
#include <stdio.h>
int main()
{
int num = 6; // num 是 int 数据类型
int *p = # // 指针变量 也要是 int 数据类型
return 0;
}
指针前数据类型的作用
- 由于指针变量指向的是某一个变量占用的储存空间的首地址
- 所以在获取指向变量中储存数据的时候,指针是不知道获取多少个字节的数据
- 指针前的数局类型,就是告诉指针 在获取指向变量的数据时,需要获取几个字节的数据
- 小练习 定义一个函数修改变量的值
#include <stdio.h>
//函数声明
void change(int *value);
int main()
{
int num = 9;
printf("修改前num = %i\n",num); // num = 9
change(&num); // 调用函数
printf("修改后num = %i\n",num); // num = 888
return 0;
}
//定义函数修改变量的值
void change(int *value){ // int *value = &num
*value = 888; // *value 代表指向储存空间的地址 修改里面的数据
}
多级指针
-
概念
多级指针是指 " 指针 "中保存的又是其他指针的地址,称之为多级指针 -
定义
在保存的指针变量的基础上加上一颗星即可 -
访问规则
如何定义的就如何访问
int *p; 访问 *p; 例如 int **p; 访问 **p;
定义指针的规律
- 将要指向的变量的定义拷贝过来
- 在拷贝过来的代码的类型和变量名称中间加上一颗星
- 修改变量名称
- 一级指针
int num = 6;
int *p = #
- 二级指针
int **pp = &p; // *pp == p == &num
- 三级指针
int ***ppp = &pp;
- 规律: 如果想通过多级指针获取某个变量的值, 那么是几级指针, 前面就写几颗星即可
整理到次下次编辑处139