写点什么

【C 语言难点突破】指针入门讲解

作者:Geek_65222d
  • 2022 年 10 月 04 日
    河南
  • 本文字数:1088 字

    阅读完需:约 4 分钟

指针

内存的概念

在说另新人感到发指的指针之前,我们先聊一聊内存这个概念。


内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1 个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。


而内存单元的编号通过地址线通电或者断电产生的数字信号 0/1 的组合来表达内存单元的编号,如生活中 32 位,64 位机器,就是指的是多少跟地址线,一根地址线表达一个 0 或者 1,32 位就是 32 跟地址就是 32 个 0 或者 1 组成的地址长度,这里地址编号由 0x(区别十进制和十六进制用的像前缀一样的东西!)+8 个十六进制(等效为 32 个二进制)



变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:


#include <stdio.h>int main(){ int num = 10; printf("%p\n", &num); return 0;}
复制代码


&num 是取出 num 的地址,注意:这里 num 的 4 个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址),printf 打印地址,%p 是以地址的形式打印。

指针变量的定义

上面我们已经解释的指针到底是什么,不要把它想得过于困难,过于高大上,简单认为其实就是一段数字而已。


#include <stdio.h>int main(){    int num = 10;    int* p = &num;    *p = 20;    return 0;}
复制代码


注意:这里使用指针变量的和上面定义指针变量的完全不一样!


把地址存储到指针变量并不是我们最终的目的,就像你的家庭地址,并不是为了单纯的记住,而是有一天可以去你家找你请你吃饭什么的,所以这里的 p 为存放 num 地址的指针变量,pc 这个是解引用操作符,要清晰的区分两个的作用!定义时的是格式需要,代表这个类型是指针变量类型;使用时的*是解引用操作符,通过 p 存储的地址在内存中找到地址对应的变量,来进行其他操作的!储存是为了更好的找到!

指针变量的大小

#include <stdio.h>//指针变量的大小取决于地址的大小//32位平台下地址是32个bit位(即4个字节)//64位平台下地址是64个bit位(即8个字节)int main(){    printf("%d\n", sizeof(char *));    printf("%d\n", sizeof(short *));    printf("%d\n", sizeof(int *));    printf("%d\n", sizeof(double *));    return 0;}
复制代码


指针变量的大小,不取决于指针变量指向的变量类型而取决于多少位的平台!因为在多少位平台就有多少位二进制来表达你的数据地址!我们算的大小不是数据的大小,而是数据地址的大小,数据地址大小又取决于多少位平台下多少个 bit 位的表达,sizeof 用字节表示大小,所以地址大小用字节表示只有 4 或 8 的区别!

发布于: 刚刚阅读数: 3
用户头像

Geek_65222d

关注

还未添加个人签名 2022.09.09 加入

还未添加个人简介

评论

发布
暂无评论
【C语言难点突破】指针入门讲解_10月月更_Geek_65222d_InfoQ写作社区