C指针动态数组问题

大神,请问int*p=(int*)malloc(4*len)这是定义了一个动态数组,为什么返回第一个字节地址,P却指向前四个4字节... 大神,请问int * p=(int*)malloc(4*len)这是定义了一个动态数组,为什么返回第一个字节地址,P却指向前四个4字节 展开
 我来答
空雪梦见
2014-12-09 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1182万
展开全部
因为p的类型是int*,int的长度是4个字节。malloc的返回值是void*,void*意思是只表示地址、没有类型。没有类型的话也就谈不上“指向一个什么什么变量”这种情况

就算是“指向前n个字节”其实里面保存的也就是第一个字节的地址
更多追问追答
追问
不懂,1.静态数组,数组名有第一个元素的地址,是不是即数组名指针变量指向第一个元素,也就是指向前4个字节的静态空间对不对?2.动态数组,数组名没有第一个元素的地址,只有第一个字节地址对不对,3.为什么保存的是一个,指向的是四个详细点过程清楚点,请大神依次解答3个问题,说得好加分
追答
啥玩意儿…………
你就这么理解,指针是一个变量,这个变量里面保存的是一个地址,这个地址总是一个空间的起始地址。
至于指向多少大的空间,和指针的类型有关。指针指向多大的空间实际上就是指针指向的变量占多大的空间。
对于数组而言,a[x]是指数组的第x个元素
对于指针而言,a[x]是指指针指向的地方开始数的第x个元素

硬要说的话,C语言里没有“动态数组”,数组都是静态大小的。
指针和数组名只是语法上看起来一个样,实际内部处理上来说是有少许差别的。不知道你有没有学过多文件编译出一个可执行文件这种,如果有的话倒是有一些比较容易懂的方式来说指针和数组的区别……
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式