C语言之初识指针
指针是什么?
那到底什么是指针呢,其实指针和之前学习的变量基本相似,不过变量里面放的是一些值,而指针里面放的是它所指的地方的地址。在声明一个变量是,计算机就会为该变量预留一个位置,而指针所指?的就是那个位置。
举个例子:
int a = 10;
//设置一个变量a的值为10
int *p = &a;
//p这个指针里面就放的是a的地址
而&这个符号,就是取地址符,就像我们在使用scanf函数时 scanf("%d",&a); 这个a前面的&是一个意思,就是获取到某个变量的地址。
而当你创建了一个指针是,你就要给他赋地址,否则的话它就会像那种鼠标一样在硬盘上乱找,就会随机找个地址,所以我们在创建了指针时,就一定要给他去给他赋一个位置。
指针的基础:
如何创建一个指针函数呢?
int p;
这是我们之前就知道的,创建一个整形变量p,而int *p;
就是设置一个指针p;关键就是在于中间的 *。所以我们在创建指针变量时,一定不要忘记 *;
指针的赋值:
可以在创建指针的时候就赋值像这样:int *p = &a;
也可以在创建了之后单独赋值像这样: int *p; p = &a;
两种方法都一样,没有太大的区别,只不过一个一行代码,一个两行代码,如果我们之前已经创建了变量,那我们还是在创建指针的时候就直接给他赋值,以免后面忘了,对自己后续的程序发生影响。
那指针到底能干什么呢?
#include <stdio.h> int main() { int a = 10; int *p = &a; printf("a的地址为%p",&a);//这是直接输出a的地址 printf("a的地址为%p",p);//只是输出p的指针所指的地址 printf("a的值为%d",*p);//输出p的指针所指的地址中变量的值 return 0; }
通过这3个输出函数我们可以知道,前两个输出的都是a的地址,而第三个输出的则是a变量里的值。
所以我们可以理解为 *p
就是 a
这个变量的值,这就是最通俗易懂的理解了。
并且在输出 p
时也就是输出 a
的地址时,也是有不同的输出方式的,最基础的就是
- %lu 是十进制的方式输出;
- %p是以十六进制的方式输出;
之前说到 *p 可以看作是它所指的 a 变量的值,所以它也是可以再重新被赋值的,当然它的赋值不是给指针函数赋值,看似是在给指针赋值,其实改变的还是它所指的函数的值;
像这样
int a,*p; a = 10; p = &a; *p = 20; printf("a = %d",*p);
这个函数所输出的值就会为 20 ;因为指针是之间在你的地址上给你改变,所以说指针的改变相比较之前的函数就会方便很多,比如我们在学习函数的时候,会将值从主函数传到其他的函数中去做计算,但是传回来时就很麻烦,因为它一次只能传回来一个值,但是指针就不一样了,它不需要将值传回来,直接时实时将它所指的值进行改变;
像接下来这个例子,我们之前也都用函数的方式写过;
#include <stdio.h> void swap(int* p, int* q) { int temp; temp = *p; *p = *q; *q = temp; } int main() { int a = 10, b = 20; swap(&a, &b); printf("a=%d b=%d",a,b); return 0; }
这个函数最后输出的值为
可以看到,输出的值已经发生了交换,这就是指针的强大之处吧;
可以更简单的来解决我们之前遇到的问题,所以说,学好指针是学好c语言的基础!
上一篇:Visual Studio Code 配置C、C++ 文件debug调试环境的详细过程
栏 目:C代码
本文标题:C语言之初识指针
本文地址:http://www.codeinn.net/misctech/212721.html