周游C语言教程10 - 指针

周游C语言教程10 - 指针

这是周游C语言的第十篇教程,你将在这篇文章里认识指针。

指针

指针就好像是经纬度,有了经纬度就可以找到地球上的任意一个地方。C语言里的指针就能起到经纬度的作用。我们都知道,C语言的变量都存在在内存中,我们对内存进行编号,每个字节都增加一个编号,这样我们就能根据这个编号找到内存中任意一个位置,我们把这个编号称作地址

取地址

我们定义一个变量通常是不知道它的地址的,因为编译器自动为我们分配了地址空间,当我们想要获取这个变量的地址时,就需要使用&来获取,同时&变量名的方式就可以获取到地址。

指针

指针表示它保存的是一段地址,取地址取出的地址就需要用指针来保存。指针和变量本质没有不同,只不过一个存储的是变量本身,一个存储的是变量的地址。就好像普通变量保存了一座武夷山,那指针变量会保存一座山的经纬度,这个经纬度正好是武夷山所在的经纬度。

指针变量和普通变量本质没有不同,所以同样需要声明。

数据类型 *指针名;

只需要在正常声明一个变量的变量名之前加一个*即可。

int * pInt;// 指向一个int类型变量的指针
double * pDouble;// 指向一个double类型变量的指针
char * pChar;// 指向一个char类型变量的指针
...

这些都是指针,只不过指向的内容表示的数据类型不同。

取内容

现在我们知道了一个变量的地址,但显然我们需要的任然是这个变量本身而不是其地址。使用*就可以取出地址中内容。

int a = *pInt;
double b = *pDouble;
char c = *pChar; 

这个里*和声明中的*并不相同,只需要记住声明时的*表示这个变量是个指针变量,其他时候表示取内容即可。

#include <stdio.h>

int main()
{
	int a = 20;
	int* pInt = 0;
	pInt = &a;
	printf("a的值为%d\n",a);
	printf("pInt的值为%d\n", pInt);
	printf("pInt的指向地址的内容为%d\n", *pInt);
	*pInt = 30;
	printf("更改后pInt的指向地址的内容为%d\n", *pInt);
}

空指针

令一个指针变量等于0,那这个指针就为空指针。大多数的系统都不允许访问地址为0的内存空间,因此可以用0来表示这个指针没有指向任何一个地址。当其被赋予初值0后,可以使用如下代码来判断指针是否被赋予地址。

if(ptr)//如果指针被赋值,表示有实际意义
{

}

注意

由于C语言定义一个变量时如果没有赋予初始值,那么这个变量的值将会不可预测。对于指针来说这是尤为危险的,比如定义了一个指针变量而没有被赋予初值,由于不可预测,它现在的值是一个很随机的地址,假设这块地址正在被别的程序使用,而你此时通过取内容将它改变。那么别的正常运行的程序就会出现异常,如果这个程序正好是你的操作系统,那么蓝屏正在等着你。

很多现代编译器已经将没有赋予初值的指针列为编译错误,但一些老旧的编译器任然会正常编译,因此你需要极其的注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝忧云枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值