C语言中关于指针的问题

自学C,零基础。请问:【多维数组最后一维的元素是数组中保存的数据,剩下的各维和多维数组名都是指针。】这句话该怎么理解!能举例说明吗?... 自学C,零基础。
请问:【多维数组最后一维的元素是数组中保存的数据,剩下的各维和多维数组名都是指针。】这句话该怎么理解!能举例说明吗?
展开
 我来答
infyzm
2019-02-26 · TA获得超过153个赞
知道答主
回答量:21
采纳率:0%
帮助的人:30.6万
展开全部

    提问者的理解稍微有一点误区。指针了类型是4个字节(32位),没错,当然这和系统有关,暂不讨论这个问题。int类型我们也按照4个字节来看待。

    图中p是一个指针类型的变量,a是一个整型的变量,他们所占的空间都是4个字节,是方框表示的大小。但是提问者的误区在这里,指针变量里面存放的是什么?虽然它是一个指向int变量的指针,但它存放的不是int变量,而是整形变量的地址0008!(记住指针变量存放的是变量的地址,而不是变量本身,所以指针变量p的空间大小和指针变量指向的内容a的空间大小没关系,和你所使用的系统的地址空间有关)

这样就有出现了一个问题,我也不知道指针变量要给多大才够啊,四个字节够吗?怎么判断指针类型的大小够不够呢?这和系统相关,语言设定的指针变量的空间的位数要能够足够表示内存地址的个数。

    举个例子,假设你的内存是512字节的,就是512的地址需要区分(小了点,解释方便)。那么也就是说你的内存是从0到511(0000 0000 - 1111 1111)(以下说明为了简单,不考虑复杂的寻址方式,也不区分片内地址,看不懂可以略过,主要是怕有人产生疑惑,假设寻址的时候地址和物理地址是一一对应的关系)。如果你说指针变量为1位,那么你觉得可以吗?1为只有0和1两种状态,只能表示两个地址其他510个呢,怎么能表示512个地址呢!4位,很显然只能表示16个地址(0-15)。

    因此,你提问中的指针变量为什么要用32位,这和一个字节是8位没有关系,要看你内存的地址空间有多大,最少指针变量的空间要能够表示整个地址空间。假如未来内存变得很大很大,现在的32也不一定够用。

    上面举得那个512字节的地址的例子,可能有人会自己去算去,我的内存是1G,2G,4G,那么我的指针变量为什么也是四个字节呢?我只能说一定是够的,只不过像我刚才声明的那样,计算机的实际的寻址方式并不是我们想象的那么简单,并不是单纯的一对一的关系,涉及到片选和片内地址的为问题,二者是不同的,如果想学习的话,可以看下计算机组成原理方面的书籍。

百度网友d968bd3
2019-02-25 · TA获得超过276个赞
知道小有建树答主
回答量:156
采纳率:87%
帮助的人:92.7万
展开全部
从一维开始类比
定义数组int a[10]
则a[1],a[2]这些就表示对应数据(变量)
但是,直接写a就表示数组的头指针(地址)
也就是a=&a[0]
同样类比到二维
定义数组int a[10][10]
则a[1][1],a[2][1]就表示变量
但如果用一维表示则为指针
即a[1]=&a[1][0],a[2]=&a[2][0]
用数组名则表示整个数组的头指针
即a=&a[0][0]
同理可以类比到更多维度。
纯手打,望采纳,谢谢。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友090d7d1aa06
2019-02-27 · TA获得超过3640个赞
知道大有可为答主
回答量:3144
采纳率:32%
帮助的人:211万
展开全部
指针类型所占内存空间在32位系统下为4个字节。是指:指针本身占的长度。
移动指针的时候。。。。。。。。。。。。。指的是:指针所指的类型所占的长度啊。
你可以用sizeof()看一下
所占内存大小。
比如
char
*p;
int
*s;
那么:
sizeof(p)=4,sizeof(*p)=1
sizeof(s)=4,sizeof(*s)=4
注意,结果依据编译器而定。TC一般是2字节。。VC++是4字节。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式