指针只有4个字节,它里面怎么可以存放很多数据呢??很多都已经超过了4个字节了呀?

 我来答
sj005bd
2014-02-09 · 超过43用户采纳过TA的回答
知道小有建树答主
回答量:133
采纳率:0%
帮助的人:100万
展开全部
一.概念:int *p;
1. p是指针变量不是指针
2.指针变量里面放的是地址,也可以说是指针(32位系统地址长度为4字节,64位系统地址长度为8字节)
二.定义
关于int *p的形象的解释
1)首先他会在内存中创建一个4个字节的地址空间(以下都默认是32位系统)(这块地址空间取名叫p)
2)其次他会告诉编译系统我里面放的是地址,不是值。(*的作用)
3)最后他会告诉编译系统我里面放的地址是什么类型的(本例子是int 型的)(int 的作用)
三.赋值
先定义一个数组,该数组占16个字节
int a[4]={1,2,3,4};
关于p = a;的解释
这句话会把数组a的起始地址放到指针变量p中
比如a的起始地址是0,那么a[0]的起始地址就是0,a[1]是4,a[2]是8,a[3]是12
此时p指针变量里面保存的就是地址0
三.调用
int b = *p;
1)编译系统会先找到指针变量p所在的位置,然后取出里面的值0,然后它会看一下p的定义,发现p是指针变量,这时他会把p里面的0当成地址来看,
2)找到p里面的地址0所在的位置,此时编译系统再查看一下p的定义,发现p是int型的,也就是占4个字节,此时编译系统会从地址0开始读4个字节的数据(二进制型的)翻译成Int型(整型的)赋给b
p++;
指针变量的运算很简单,就是把指针变量里的地址拿出来,然后查看指针的定义,把里面的地址加上定义类型的长度(比如int长度是4,char长度是1,也可以自己定义结构体)
所以*(p+1)就相当于a[1]的值
*(p+1)这么写太麻烦了 我们喜欢把*(p+1)写成p[1],同理p[2]就等于*(p+2).
此时p[0] = a[0]
p[1] = a[1]
p[2] = a[2]
p[3] = a[3]
可以发现p可以访问数组内的所有数据
其实说白了一维数组本身就是一维指针,二维数组其实就是二维指针

指针这东西不学汇编确实有点难理解,但指针确是c语言里面最重要的东西 学懂了指针c语言就学会了 c++的学习也能很容易 以上回答希望对你有帮助 如果还有不了解可以追问
更多追问追答
追问
如果那个数组是float型的呢??
追答
都一样
nicholasbai
2014-02-09 · TA获得超过164个赞
知道答主
回答量:55
采纳率:0%
帮助的人:56.9万
展开全部
指针占用的字节数与系统和编译选项有关
如果是32位系统,那指针固定是4字节
如果是64位系统,就要看编译选项,可以编译成32位和64位的程序,如果是32位,就占用4字节,64位就占用8字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友72165e1
2014-02-09 · TA获得超过2169个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:410万
展开全部
指针本身只存放一个地址,所以指针的内容是唯一的,就是一个单元的地址。但它所指向的单元,在很多情况下仅是一个连续内存空间的首址,所以在这个连续空间里就可以视其大小而确定能放多少数据了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
solotony
2014-02-09 · TA获得超过599个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:567万
展开全部
指针不存数据,它只是存一个地址,门牌号而已
更多追问追答
追问
还真忘了,是地址,但是那地址是几个字节呀??指针是4个字节又怎么理解??
追答
指针就是地址,就是4字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
crystal水叔
2014-02-09
知道答主
回答量:7
采纳率:0%
帮助的人:2.5万
展开全部
可以指定单元的大小啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式