指针是什么?
那到底什么是指针呢,其实指针和之前学习的变量基本相似,不过变量里面放的是一些值,而指针里面放的是它所指的地方的地址。在声明一个变量是,计算机就会为该变量预留一个位置,而指针所指☞的就是那个位置。
举个例子:
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语言的基础!
到此这篇关于C语言之初识指针的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。