C语言指针的简单操作与使用

一.指针的概念介绍

        指针是C语言编程中知识占比较大的一个领域,它与计算机中的“内存”息息相关。内存我们可以理解为电脑的存储器,它用于暂时存放CPU中的运算数据,以及与硬盘外部存储器交换的数据。它是外存CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行。

        在C语言中,为了有效使用内存,系统会把内存划分为一个个小的内存单元,每一个内存单元的大小为一个字节,后来,开发者给每个内存单元进行了编号,有了序号,我们就可以有效的访问到内存的每个单元,我们称这些编号为内存单元的地址,也叫做指针。

         如图,内存的构造就如同一幢高楼一般,每一层的每一个房间就是其中一个内存单元,每一个内存单元都进行相应的编号,拥有属于自己的地址,就是为了以后有指针变量进行访问的时候,能够精确指向该变量的内存地址,达到相互关联的作用。

        之前内存所有的地址都是由计算机一个个编号而成,输出的都是0,1两个数组成的,内存的总大小为2的32次个,即0~(2^32)-1,每个地址都是32位二进制数,太过繁琐,所以后来将二进制数的32位地址数转换成16进制大小,每四位二进制数转换成一个十六进制数,大大简化了地址,而0X 开头就是代表以十六进制来表示的意思。

        如上图,因为int是整形,代表四个字节,所以内存中需要4字节的内存单元去存放变量a,而这四字节的首字节则表示变量a的地址! 

 而接下来则显示了指针的使用实例

#define _CRT_SECURE_NO_WARNINGS 1
# include<stdio.h>
int main() {
	int num = 10;
	int * p  = & num;

	    *p = 20;
	printf("%d\n", num);
	return 0;
}

 

        上图需要注意的是红框圈住的三个字符,用到了两个操作符:&,*。首先来讲一下程序执行:

1.程序创建了一个变量num,赋值为10,

2.“&”号是取地址操作符,常用于取出某个变量所在内存的地址位置,这里表示取出num的地址传给一个变量p。

3.解引用修改了指针的数值  (10--->20)

        注意这个变量p前面不止有int 类型,还有一个"*"号,这表明是一个int类型的指针变量p,只有该变量的类型是指针变量,我们才能够接收某个变量或数组的地址。下一句的*号解释为解引用操作符,它是通过指针变量p去修改或者重新定义num的值,所以在最后输出num的值时,num变为20。

        需要注意的是:其中两个“*”号的作用各不相同。第一个*号只是语法形式,只是指针变量的表现形式,没有其他意义;而第二个*号则是解引用的意思,可以间接改变变量的值!!!!!

        这个实例就好比:A手头有10万元,A的朋友B想要找到A借这10万去创业,A给B留下了他家的地址,B通过这个地址来到了A的家里,找他借了10万,之后B创业成功,还钱后,为了报答A,直接多送给了他10万,这样A手里就有了20万。指针变量就是通过地址去关联变量,从而改变变量。

示例练习:
int main() {
	char ch = 'W';
	char* p = &ch;
	*p = 'a';
	printf("%c\n", ch);
	return 0;
}

        另外就是指针的类型不止int一种,还有char型,short型,long型,long long类型的指针,尽管有众多类型的指针,但指针变量的大小都是相同的(在相同位的系统下)。

指针变量的大小取决于地址的大小!

//32位平台下地址是32个bit位(即各种类型的指针变量大小占4个字节)——x86系统

//64位平台下地址是64个bit位(即各种类型的指针变量大小占8个字节)——x64系统

#define _CRT_SECURE_NO_WARNINGS 1
# include<stdio.h>
int main() {
    printf("%zu\n", sizeof(char*));
    printf("%zu\n", sizeof(short*));
    printf("%zu\n", sizeof(int*));
    printf("%zu\n", sizeof(long*));
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橙予清的zzz~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值