C语言中的指针

C语言指针的由来,为何会有指针这个东西?

要弄明白指针,咱们得先了解内存,咱们先从内存开始提及。
内存是电脑上特别重要的存储器,计算机中全部程序的运行都是在内存中进行的,全部为了有效的使用内存,就把内存划分成一个个小的内存单元,每一个内存单元的大小是1个字节,为了可以有效的访问到内存的每一个单元,就给内存单元进行了编号,这些编号被称为该内存的地址
举例说明
咱们中国国土面积有960万平方千米,我想在中国找某一所学校,或地方,好比,国防科技大学,咱们不知道它在中国的哪里吧。咱们确定会打开百度,或者导航搜索一下,国防科技大学,具体在哪一个省哪一个市,那么导航和百度确定会告诉咱们它的地址,在湖南省长沙市,咱们就能够经过这个地址方式去找到它。
那么在咱们电脑的内存也是一样的思路。
咱们的内存就是一个一个小的内存单元!
内存单元至关于(国防科技大学)
编号至关于(国防科技大学里的某一栋教学楼或者教室号)
咱们能够经过地址,能够很好的定位到某一栋教学楼。
如图所示:
C语言中的指针
如图所示,咱们来思考两个问题
1.如何给每一个内存单元编号呢?
2.每一个内存单元的大小是多少呢?
思路1:
咱们内存中如何产生地址?有了地址就有编号!
举例说明:咱们电脑是否是都有一个系统类型32位或64位,32位的系统类型如何产生地址呢?(计算机只能识别二进制)32位系统就会有32个二进制组成。
C语言中的指针
思路2:
那么这样的一个内存单元会是多大呢?
计算机中的单元 从小到大:bit ---byte---Kb---Mb----Gb---Tb.....
咱们猜测一下咱们的内存单元会不会是一个bit大?
若是咱们的内存空间是一个比特位,那么咱们32个比特位会是多大呢(GB)?
0001 0000 0000 0000 0000 0000 0000 0000 0000
这里的1表明的是2的32次方
转换为十进制为
4294967296
2的32次方的比特位就等于4294967296
把4294967296比特位换算成字节、kb、mb、gb分别是:
byte=4294967296/8=536870912
KB=536870912/1024=524288
MB=524288/1024=512
GB=512/1024=0.5
最后获得0.5GB
若是一个内存单元是个比特位的话,2的32次方比特位=0.5GB,也就是说咱们只能访问内存0.5GB,因此32位类型的机器,给咱们4个GB咱们是否是也用不了。
因此咱们试试一个内存单元是一个字节的话,
咱们就用2的32次方比特位*8=4G 恰好能够访问4个G 的空间!!!
因此咱们获得结论一个内存单元为一个字节。
因此在32位的平台上指针的大小为4个字节
在64位的平台上指针大小为8个字节。ide

咱们来看一个列子
C语言中的指针
如图所示int a=10;
int整型,占4个字节,咱们就在内存中给变量a4个字节的空间。
这就是给咱们变量申请内存的一种方式。
以上就是咱们的理论知识!!!
接下来,经过一个代码也体现咱们的指针。3d

int a = 10;//10放变量a中存起来,变量a的类型为整型;
&a;
printf("%p",&a);
//整型在
内存中占4个字节,经过&a就能知道变量a在内存中的地址
如图所示:

C语言中的指针

把变量a的地址存起来。指针

int a = 10;//把10放变量a中存起来,变量a的类型为整型;
    int* p =&a;//把a的地址放到指针变量p中存起来,p的类型为指针变量(int*)
    printf("%p",&a);
    printf("%p",p);

如图所示:&a=p 也就是p中存放了a的地址。
C语言中的指针
经过地址,找到a,而且修改a的值。
*p就是对p中的地址,进行修改。code

int a = 10;//10放变量a中存起来,变量a的类型为整型;
    int* p = &a;
    *p = 20;//经过地址找到a,修改a中的值。
    printf("a=%d", a);

C语言中的指针

注:指针类型区分。
整型指针变量int p
字符指针变量 char
pc
……blog

相关文章
相关标签/搜索