今天学习什么是指针
指针是什么?
指针是一块内存空间(内存地址)
咱们用代码理解一下
#include<stdio.h>
main(){
int i ;//申请一块内存空间,空间大小的4byte ;给这个内存空间去一个名字i
i=3;//把一个int类型数据为3,放到i的内存空间里面
//int i 创建出来存放int类型的数据 ;double d 创建出来存放double类型的数据
int* p;//申请一个内存空间,空阿金大小4yte
//int* 创建出来P存放一个地址
//创建一个int* 的数据类型,p就是他的别名
// p里面存放的就是一个内存空间地址
p = &i;//取出i的地址
printf("i的地址值为:0x%x\n",p); //输出I的地址值
printf("i的值为:%d\n",i); //输出I的值
printf("i的值为:%d\n",*p); //把P的内存地址里面的值取出来
system("pause");
}
输出的结果
修改了i的值会不会影响P的值??
但是是不会
为什么呢?因为P的一个内存空间,这个空间已经创建好了,里面的值是是什么不会影响P的值。
交换两个数据来体验一下指针
#include <stdio.h>
//交换两个数字的函数
void swap(int i, int j){//方法体放在调用的前面
int temp ;
printf("交互数据.....\n");
temp = i;
i = j;
j = temp;
}
//交换两个数据 传递过来的是地址。
void swap2(int* p, int* q ){
int temp ;
printf("交互数据.....\n");
temp = *p;//把P里面的值取出给到temp
*p = *q;//把q里面的值给到p的值
*q = temp;//把temp给到q的值
}
main(){
int i = 3;
int j = 5;
printf("i=%d\n",i);
printf("j=%d\n",j);
swap2(&i,&j);
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
子函数一但执行完就会被系统回收掉
指针的常见错误
#include <stdio.h>
main(){
//指针的第一种常见错误,使用指针变量,必须先赋值,后使用。
//int* p ; //声明一个指针变量,用来存放地址,
//printf("*p=%d\n",*p); //野指针
//指针的第二种常见错误, 数据类型一定要匹配,什么类型的数据,就需要用什么类型的指针变量
//int i =3;
//int* p = &i;
//double d = 3.1415926;
// double* q = &d;
//p = &d;
// printf("*p=%\n",*p);
//指针的第三种错误。
// double* q =&3.1415926
//指针的第四种错误
//int* p = 0x22ff3d;
int * p; //int* p int *p
//int *p
system("pause");
}
指针的优点:
直接访问硬件(opengl显卡绘制图)
快速传递数据(指针表示地址)
返回一个以上的值(返回一个数组或者结构体指针)
表示复杂的数据结构(结构体)
方便处理字符串
有主于理解面向对象
多级指针
#include <stdio.h>
main(){
int i = 3;
int* p = &i;
int** q = &p;
int*** r = &q;
printf("i=%d\n", ***r);
system("pause");
}