C语言动态内存分配的疑问

在C语言中,动态内存分配是这样的。int*pival=(int*)malloc(sizeof(int))上述语句是在内存中声明了一个指针变量pival,其中(int*)表... 在C语言中,动态内存分配是这样的。 int *pival=(int*)malloc(sizeof(int)) 上述语句是在内存中声明了一个指针变量pival,其中(int*)表示该段内存空间的数据类型指向整形,sizeof(int)表示长度为四个字节,malloc(sizeof(int))表示配置了一段四个字节的内存空间.可以这样解释吧?如果以上我说的正确的话。 那么动态分配二维数组的第一维度则是这样的。 数据类型 **指针变量=(数据类型**)malloc(sizeof(int*)) 其中,数据类型后面的存取运算符为什么有两个呢? sizeof(int*)中为什么要加一个星号,这个到底是为什么,区别在哪,如果不加会怎么样。 展开
 我来答
buptxiejianjun
2011-08-14 · TA获得超过3278个赞
知道大有可为答主
回答量:1019
采纳率:0%
帮助的人:1137万
展开全部
这样解释:
1、你关于一维数组和指针是理解正确了,但二维(指针的指针)理解还不到位,需要再多看书。例如字符指针是 char *str 定义的,这是一维的指针,指针是变量,指针变量里面存储的是字符串的起始地址。而二维的指针,即指针的指针,是定义了又一个指针,指向的是指针变量,例如 char **str 的意思是:str变量是指针的指针,str变量存储的是一个指向字符串的指针变量的地址。要想直观理解,建议看书,书上一般会有内存示意图,非常直观。

2、sizeof是关键字,也可以说是运算符,不是函数,sizeof(int)即当前机器的int类型定义的大小,一般是在编译器内部用宏定义的,常用的是4字节。而sizeof(int *)是指的是一个指针变量的大小,其实是不要用int的,直接写sizeof(*)就表示指针大小,指针大小是不变(指针变量的大小在32位系统中是4字节,64位系统是8字节),即不依赖于指向的类型所以sizeof(int *)和sizeof(double *)都是一样的,编译器解析时会删除类型,直接变成sizeof(*),所以是一样的。
公元后19970111
2011-08-14 · TA获得超过202个赞
知道答主
回答量:196
采纳率:0%
帮助的人:133万
展开全部
这个你一定是没有仔细看数
数据类型**表示定义的变量只能存放以“数据类型*”类型数据的地址
如 int ** p
表示p只能存放int *类型变量的地址
比如可以这样写
int *p;
int ** q=&p
这样的话你明白了吗
不明白加我
1203798698
九年级五班的张广耀祝你学习顺利
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友198ea6d
2011-08-14 · TA获得超过277个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:133万
展开全部
二维数组,比如说一个表,第一个维度是每一行的指针,这个指针指向的是 “指向这一行中每一个列元素” 的指针,所以是**,sizeof(int*)就是取指向int型变量的指针的大小。其实32位机中所有指针都是4字节,都写4就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柴社荣
2011-08-15
知道答主
回答量:8
采纳率:0%
帮助的人:1.3万
展开全部
数据类型后面两个取值运算符是和你的指针类型相匹配的,比如说:char *p = (char *)malloc...
表明这段内存是按你指针类型进行访问的,主要用在指针移位的时候,步长会按照你的指针类型来进行移位。

后面那个问题,sizeof(int *) ,只是代表一个指针大小。说明你分配一个指针大小的空间。

你的语句的意思就是分配一个指针大小的空间给一个指针的指针。

希望对你有帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式