在日常生活中,我们常常在外出时居住酒店,细心的你一定能发现酒店不同的房间上有着不同的门牌号,上面写着像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
-
- 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语言。
完