C/C++问题:一个指针的大小是多少?怎么理解指针变量的存在
创始人
2024-04-10 02:21:32

目录

举例

一、

 int a;

int (*(*v)[])();

二、

int func();

int (*func)();

三、

const;

int const a;

const int a;

int const*r;

int *const r;

四、一个指针的大小是多少?(补充)


举例

一、

 int a;

 可以看到上面声明了一个变量,自然一眼就可以看懂;那下面这个呢??

 如果你被绕晕了,那我会教你一个有用的方法;按照这个方法你会读懂任何类型的声明。

第一步:找到变量名

 第二步:向右看

 第三步:再次往左看

 第四步:如果有括号的话跳出一层括号

 第五步,重复上述过程,直到读出最终的类型。以上过程同时适用于变量函数的类型声明,

包括函数指针。学会了上面的过程,那让我们举一些具体的例子来操练一下吧

int *v[5];

 每个元素都是指向int的指针或者更符号汉语习惯的v是一个有5个指向int的指针的数组,那么加上括号又是个什么意思呢??

我们要先考虑括号内的声明 所以:

 

 V是一个指向有5个整数的数组的指针

现在让我们搞点比较复杂的东西,那就是下面这个

int (*(*v)[])();

 所以v是一个int型函数指针组成的数组,看明白这个你就知道怎么回答上面这个问题了。

 

所以完整的说就是:v是一个指向int 型函数指针组成的数组的指针

二、

下面让我们来看看函数指针

int func();

int func()是个函数声明,func();是个返回int型的函数

那么下面这个呢?

int (*func)();

int (*func)();

 

 所以func是个指针,指向一个返回int型的函数,这就是函数指针

三、

最后我们聊聊const

const;

   const是常量声明,意思是不能改变变量的值;const处在变量声明中不同位置的时候,效果是不一样的;很多在同学在学习的时候容易混淆

int const a;

最简单的int const a;等价于const int a;意思是a的值不能改变

 

加入指针的情况下会变得稍微复杂一点。

  所以r是一个指向const int的指针,*r不能改变;但是r本身不是const,所以可以改变。

const int a;

不能够改变的int型变量

int const*r;

你可以直接给r赋值,让它指向别的地方。

int *const r;

我们把const和*的位置互换一下,效果就又不一样了。

 指向int 意味着r的值本身不能够改变,同时也不能给r进行赋值;但是int没有const修饰

所以*r是可以改变的

四、一个指针的大小是多少?(补充)

    对于现在学c/c++的新人,经常碰到一个简单但容易犯错的问题

指针的大小是多少??

 不如换种说;一个指针在内存里面占多少个字节??

 举个例子  我们现在有三个指针,分别指向一个char 和double还有一个struct;这个struct里面还有一个char和一个长度为100的float的数组。

那么请问这三个指针的大小是多少??

 有些同学可能认为指针跟指向类型的大小是一样的,比如char指针和char一样是一个字节;double指针和double类型一样占8个字节;上面的struct占401个字节,那么指向它的指针也占401个字节,然而这只是一个错误的经典理解。其实不论在什么样的机器上,在同一个机器中。不管指向什么,指针的大小都是固定的,都是跟内存的地址一样长。为了去理解这个问题,我们需要知道

指针是什么?? 指针的本质就是内存的地址,所以一个内存地址有多长,一个指针就有多大


 这就是我们经常听到的两个概念;32bit架构和64bit架构,这是什么意思呢??

 

 计算机的内存是一块一块连续的区块,每个区块可以存放 1byte的的信息;

这些区块就像一些房子,我们可以给他们依次编号,这里需要注意的是,现在计算机内存的最小单位是一个字节而不是一个比特;1个字节等于8个比特

 那么给第一个地址编号0001,第二块编号0002;以此类推

 给第9999块编号9999,假如我们只用四位数记录地址;那么我们只能有9999块内存,换算成二进制,在32bit的机器中;我们使用32个比特来记录一块内存的地址;

  在64bit的机器中,我们使用64bit来记录一块内存的地址;因此32bit内存地址编号的最大值就是32bit的上限,也就是2的32次方;这个容量换算成我们熟悉的单位就是4GB;64bit的机器的内存地址编号的最大值也就是2的64次方;一共是17179869184G的内存。

考虑到现在的主流配置还是16GB,64bit的架构应该在很长一段时间都不会过时了;不会产生向新的向128bit升级的需求

 既然指针存储的是内存的地址,而内存的地址在32位架构上是4个字节;那么32位架构的指针就是4个字节。同理64bit架构的指针就是8个字节。


实际情况中,可执行程序是由编译器产生的二进制码,

因此指针的大小实际上是由编译器决定的。

     到这里就全部讲完了。 

                                                 完结撒花!!🎇🎇🎇

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...