C语言中字符数组和字符指针
一个charc[10]和一个char*lc_str=NULL;lc_str=(char*)malloc(sizeof(char)*10);在使用和内存方面有哪些区别呢,开...
一个
char c[10]
和一个
char *lc_str = NULL;
lc_str = (char*)malloc(sizeof(char) * 10);
在使用和内存方面有哪些区别呢,开放性问题,能回答到什么层面追加多少分,谢谢大家 展开
char c[10]
和一个
char *lc_str = NULL;
lc_str = (char*)malloc(sizeof(char) * 10);
在使用和内存方面有哪些区别呢,开放性问题,能回答到什么层面追加多少分,谢谢大家 展开
3个回答
展开全部
char c[10] 这里是在编译的时候就为你分配好了安全合法的内存区域。一共10个字节。它在存在于内存的栈。也就是说它的生命周期是随着函数的结束而结束(除非你把它声明成一个全局的)。当它在main()中声明,那么main()完了就释放。如果它存在于子函数,那么子函数完了就被自动释放这十个字节的空间。
第二种是动态分配内存。
也就是说程序在运行的时候才分配内存。同样也是合法安全的区域。也一样是10个字节。这个区域存在于内存的堆部分。堆上的空间系统能是不会自动释放的,要你手动释放,所以一个malloc要对应一个free 不然会造成空间的严重浪费。
第二种是动态分配内存。
也就是说程序在运行的时候才分配内存。同样也是合法安全的区域。也一样是10个字节。这个区域存在于内存的堆部分。堆上的空间系统能是不会自动释放的,要你手动释放,所以一个malloc要对应一个free 不然会造成空间的严重浪费。
展开全部
又问了一遍哈,我就知道这么多了
前者是静态的,也就是每次都要设置一个最大的MAX上限才能保证不会越界。
后者是动态的,你可以用多少就申请多少,可以在任何时候扩大或减小(free),当数据很大时,就需要把不用的空间free,而直接开数组不可以
另外如果在main内,数组不能开很大,但是却可以malloc一个很大的空间。
前者是静态的,也就是每次都要设置一个最大的MAX上限才能保证不会越界。
后者是动态的,你可以用多少就申请多少,可以在任何时候扩大或减小(free),当数据很大时,就需要把不用的空间free,而直接开数组不可以
另外如果在main内,数组不能开很大,但是却可以malloc一个很大的空间。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前者的内存在栈上分配~~后者在堆上分配~
前者不用管~~但是后者~用完后要记得用free()释放内存
前者不用管~~但是后者~用完后要记得用free()释放内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询