C指针动态数组问题
大神,请问int*p=(int*)malloc(4*len)这是定义了一个动态数组,为什么返回第一个字节地址,P却指向前四个4字节...
大神,请问int * p=(int*)malloc(4*len)这是定义了一个动态数组,为什么返回第一个字节地址,P却指向前四个4字节
展开
1个回答
展开全部
因为p的类型是int*,int的长度是4个字节。malloc的返回值是void*,void*意思是只表示地址、没有类型。没有类型的话也就谈不上“指向一个什么什么变量”这种情况
就算是“指向前n个字节”其实里面保存的也就是第一个字节的地址
就算是“指向前n个字节”其实里面保存的也就是第一个字节的地址
更多追问追答
追问
不懂,1.静态数组,数组名有第一个元素的地址,是不是即数组名指针变量指向第一个元素,也就是指向前4个字节的静态空间对不对?2.动态数组,数组名没有第一个元素的地址,只有第一个字节地址对不对,3.为什么保存的是一个,指向的是四个详细点过程清楚点,请大神依次解答3个问题,说得好加分
追答
啥玩意儿…………
你就这么理解,指针是一个变量,这个变量里面保存的是一个地址,这个地址总是一个空间的起始地址。
至于指向多少大的空间,和指针的类型有关。指针指向多大的空间实际上就是指针指向的变量占多大的空间。
对于数组而言,a[x]是指数组的第x个元素
对于指针而言,a[x]是指指针指向的地方开始数的第x个元素
硬要说的话,C语言里没有“动态数组”,数组都是静态大小的。
指针和数组名只是语法上看起来一个样,实际内部处理上来说是有少许差别的。不知道你有没有学过多文件编译出一个可执行文件这种,如果有的话倒是有一些比较容易懂的方式来说指针和数组的区别……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询