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*)中为什么要加一个星号,这个到底是为什么,区别在哪,如果不加会怎么样。
展开
展开全部
这样解释:
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(*),所以是一样的。
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(*),所以是一样的。
展开全部
这个你一定是没有仔细升肆看数
数据类型**表示定义的变量只能存放以“数据类型*”类型数据的地址
如 int ** p
表示p只能存放int *类型变量的地址
比如可以这样写
int *p;
int ** q=&p
这样吵闹轿的话你明白了吗
不明白加我
1203798698
九年级五班的张广耀弯橡祝你学习顺利
数据类型**表示定义的变量只能存放以“数据类型*”类型数据的地址
如 int ** p
表示p只能存放int *类型变量的地址
比如可以这样写
int *p;
int ** q=&p
这样吵闹轿的话你明白了吗
不明白加我
1203798698
九年级五班的张广耀弯橡祝你学习顺利
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二维数组,比如说源搭渗一个表,第一个维度是雹脊每一行的指针,这个指针指向的是 “指向这一行中每一个列元素” 的指针,所以是**,sizeof(int*)就是取指枝山向int型变量的指针的大小。其实32位机中所有指针都是4字节,都写4就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据类型后面两个取值运算符是雀银和你的指针类型相匹配的,比如说:char *p = (char *)malloc...
表明这段内存是按你指针类型进行访问的,主要用在指针移位的时候,步长会按照你的指针类型来进行移位。
后面那个问题,sizeof(int *) ,只是代表一个指针大小。说明你分配一个指针大小的空间。
你的语句的意思就是分配一个指针大小的空间给一个指针乎滑的指针。
希望对你有帮顷顷宴助
表明这段内存是按你指针类型进行访问的,主要用在指针移位的时候,步长会按照你的指针类型来进行移位。
后面那个问题,sizeof(int *) ,只是代表一个指针大小。说明你分配一个指针大小的空间。
你的语句的意思就是分配一个指针大小的空间给一个指针乎滑的指针。
希望对你有帮顷顷宴助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询