C语言指针干货——你真的学懂指针了吗?(一)

真正的大师永远永远怀揣着一颗学徒的心。近来琐事颇多,有些心猿意马,一些本该做的事没有做,本该能做好的事却做的很糟糕。然青春如如白驹过隙,当争朝夕。早在一周前就想写篇c语言指针博客,拖拖拉拉到今天才写。下面为大家带来一篇C语言指针详解。希望能和大家一起学习,交流。如有错误,欢迎批评指正,我将虚心请教。本次博客所以源码在文末。

本期内容:

指针是什么?

指针的大小

指针和指针类型。

指针运算

下期更新

 指针是什么?

 指针是内存单元中一个最小的编号,指针就是地址。地址就是指针,但是我们通常所说的指针是指针变量。(存放在指针中的值都会被当作地址处理哦)。当我们在声明int a时,系统会在内存中开辟一块空间,而内存中每一块空间都有地址编号。

指针的大小

指针大小在不同操作系统下大小不同,在32位操作系统下指针的大小为4个字节,在64位系统下,指针的大小为8个字节,这是因为32位系统表示有32根地址线而64位系统表示有64根地址线,一字节等于8bit,所以在不同的操作系统和边缘环境上,指针的大小也有所不同。

指针的类型以及指针类型的意义

指针也具有类型,如cahr* p; short*p,double* p;但是他们大小都是相同的,都是在32位环境的话就是4字节,在64位系统的话就是8字节。 虽然他们大小相同,但是意义可不一样,可以看到下面代码,以0x开头的是16进制数字,每一位16进制数字都可以转换位四位二进制,如0000这样的二进制,其中的一位就是1bit,这里因为int类型占4个字节,每个字节是8bit.而一个16进制是bit那么每两位16进制就会占一个字节,十六进制的11223344就会占四个字节,我们可以看到截图中的内存地址又A24变到A28。这里表示了有四个地址,指针会指向首地址,从首地址向后访问共四个字节。那这里我们就知道int a 的四个字节空间内,分别放了11 22 33 44,下面我们定义两个不同类型的指针变量,同时指向这段空间,看看会发生什么?

可以看到我们定义了一个char指针变量,当我们让这个指针指向的地址变量变成0时,四个地址储存的数据中,只改变了一个地址空间的值,当我们定义int 类型的指针时,让指针指向的数据变成0时,四个地址空间内的数据都变成了0,所以指针类型的意义:就是可以决定指针访问多少个字节,也就是指针的权限,当我们想人指针访问1个字节是就可以用char类型的,访问四个字节就用int,其他类型以此类推。

 

 

指针的运算

指针加减整数

可以看到同样是指针加减同一个整数,但是结果却不相同,char类型的指针加一只向后走了一个地址,但是int 类型的确是四个地址

指针减指针

指针减指针的前提是都指向了同一块开辟空间。指针与指针只能相减不能相加。

指针与指针相减得到绝对值就是两个指针之间的元素个数,指针减指针就是地址减地址

指针的关系运算 

允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与 指向第一个元素之前的那个内存位置的指针进行比较

下期更新

指针和数组

二级指针

指针数组

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值