C语言,char *a;a="abc"abc为什么可以直接赋值给a?a分配动态内存

void main()
{
char *a;
a=(char *)malloc(10*sizeof(char));
a="abc";
}

a=(char *)malloc(10*sizeof(char));这一行在这个代码中千万不能要:如果这样写,申请的10个字节还没有用就把它的标识指针a用a="abc";指向了别处,那10个字节就释放不了了,会产生所谓内存泄漏问题。有char *a;和a="abc";就非常好了。在a是char *型指针时,a="abc";的意思不是将字符串abc赋给a,而是“创建一个常字符串abc,并将首地址(第一个字符的地址,这里就是a的地址)赋给指针变量a。以后就可以通过指针a来操作字符串abc了,这里指针a也不能再让它指向别处,否则abc就再也找不到了……希望能帮到你。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-14
因为字符指针变量可以存储字符串的首地址。所以这条赋值语句实质是把字符串“abc”的首地址存入字符指针变量a中。并不需要分配动态内存。
第2个回答  2020-01-14
a=(char *)malloc(10*sizeof(char));
a="abc";
这两个语句重复给 a 赋值,前一个赋值就作废了,申请到的空间也就被丢弃了。
下面一个赋值是让a指向一个系统中字符常量区的地址(只是把一个地址赋值给a,并不是把字符串赋值给a)。
第3个回答  2020-01-14
就算不动态分配也可以直接赋值啊。建议先学习一下什么是指针,搞清楚指针和数组的区别。
第4个回答  2020-01-23
1、之所以要动态的分配内存是因为有些时候在编写程序的时候无法确定其占用的内存大小,这个时候就可以动态的分配给其一段内存空间,等到程序运行时在具体确定所需要的内存单元空间。
2、动态分配的内存空间是在堆(heap)上申请的,这部分的内存空间是有程序员自己管理的,需要程序员自己负责这些内存空间的释放,使用free函数。
相似回答