8. 指针的深入理解
为什么要使用指针?
- 直接访问硬件(opengl显卡绘图)
- 快速传递数据(指针表示地址)
- 返回一个以上的值(返回一个数组或者结构体的指针)
- 表示复杂的数据结构(结构体)
- 方便处理字符串
- 指针有助于理解面向对象
#include <stdio.h>
#include <stdlib.h>
main()
{
int i = 100;
int* p = &i;
// 1. 修改i值,p值如何?
printf("修改i值前,P的值是:%#x\n",p);
i = 200;
printf("修改i值后,P的值是:%#x\n",p);
// 2. 修改p值, i值如何?
printf("修改p值前,i的值是:%d\n",i);
int j = 200;
p = &j;
printf("修改p值后,i的值是:%d\n",i);
// 3. 如果修改i值,*p值如何?
printf("修改i值前,*p的值是:%d\n",*p);
i = 300;
printf("修改i值后,*p的值是:%d\n",*p);
printf("pause");
// 3. 如果修改*p值,i值如何?
printf("修改*p值前,i的值是:%d\n",i);
*p = 400;
printf("修改*p值后,i的值是:%d\n",i);
printf("pause");
}
10. 互换两个数字
#include<stdio.h>
#include<stdlib.h>
void sitch2(int* c,int* d)
{
int temp = *c;
*c = *d;
*d = temp;
}
main()
{
int a = 100;
int b = 200;
printf("a的值为:%d\n",a); // 100
printf("b的值为: %d\n",b); // 200
sitch2(&a,&b);
printf("a的值为:%d\n",a); // 200
printf("b的值为: %d\n",b); // 100
}
12. 多级指针
#include<stdio.h>
#include<stdlib.h>
main()
{
// 定义一个int类型的变量,并且赋值为100
int i = 100;
// 定义一个int类型的一级指针变量address1,并且把i的地址赋值给它
int* address1 = &i;
// 定义一个int类型的二级指针变量address2,并且把address1对应的地址赋值给它
int** address2 = &address1;
// 定义一个int类型的三级指针变量address3,并且把address2对应的地址赋值给它
int*** address3 = &address2;
// 定义一个int类型的四级指针变量address4,并且把address3对应的地址赋值给它
int**** address4 = &address3;
printf("****address4==%d\n",****address4);
system("pause");
}