零.导言
在日常生活中,我们常常在外出时居住酒店,细心的你一定能发现酒店不同的房间上有着不同的门牌号,上面写着像308,512之类的数字。当你定了酒店之后,你就会拿到一个写有门牌号的钥匙,凭着钥匙就能进入对应的房间。其实指针就和钥匙一样,能指向对应的空间。
一.什么是指针?
1.就像导言里说的,指针就是指向一块特定空间的钥匙。在学习C语言的过程中,我们得知了数据存储是要空间的,而指针就可以指向这块空间以供我们修改里面的数据。
就像指定的钥匙能打开指定的房门一样,我们可以创建指针类型的变量并赋值:
int a = 12;
int * pa = &a;
像图中这样操作就把 a 的地址赋给了指针变量 pa。
其中 & 是取地址操作符,pa 的类型为 int* ,可以储存地址。
二.指针有哪些类型?
1,有 int*,char*,int(*)[],int(*)(),void* 等等。
它们分别是:整形指针,字符指针,数组指针,函数指针,无类型指针。
2,还有结构体类型与其他各种各样的类型,不过基本上诉类型最为常见。
三.指针要如何使用?
int a = 12;
char c = 'c';
int arr[3] = {1,2,3};int sum(int x,int y)
{return x + y;
}int* pa = &a;
char* pc = &c;
int(*parr)[3] = arr;
int(*psum)(int x,int y) = sum;
void* p = NULL;
它们的使用方法如上图所示;以* pa为例,* pa 与 a 在此处完全等价,改变其中任意一方的值,另一方也会改变。
四.指针使用的意义
1.指针可以让我们以传址的方式将地址传到函数里,这样就能与函数同步的改变变量,不会出现形参改变而实参不变的尴尬情况。
2.指针能极大的简化我们的代码,运用得当能达到事半功倍的效果,如转移表:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int add(int x, int y)
{return x + y;
}int sub(int x, int y)
{return x - y;
}int mul(int x, int y)
{return x * y;
}int div(int x, int y)
{return x / y;
}void menu()
{printf("* * * * * * * * * * * * * *\n");printf("* * 1.add 2.sub * *\n");printf("* * 3.mul 4.div * *\n");printf("* * 0.exit * *\n"); printf("* * * * * * * * * * * * * *\n");printf("请输入值:>");
}int main()
{int input = 0;int ret = 0;int(*p[5])(int x, int y) = { 0,add,sub,mul,div };do{menu();scanf("%d", &input);if (input < 5 && input > 0){int x, y;printf("请输入操作数:>");scanf("%d %d", &x, &y);ret = (*p[input])(x, y);printf("%d\n", ret);}else if (input == 0){printf("退出程序\n");}else{printf("输入错误,请重新输入:>");}}while (input);return 0;
}
得当的使用函数使代码明显简短了许多。
3.使用指针还能加深我们对数据存储的理解,帮助我们更好地学习C语言。
五.数组指针的相关链接
多维数组的深入理解-CSDN博客
数组指针的相关知识-CSDN博客
完