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

高手,请分析下,C语言,char *a;a="abc"abc为什么可以直接赋值给a?a分配动态内存
最新回答
半袖桃花

2024-10-03 06:33:39

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就再也找不到了……希望能帮到你。
明月本无心

2024-10-03 18:59:43

因为字符指针变量可以存储字符串的首地址。所以这条赋值语句实质是把字符串“abc”的首地址存入字符指针变量a中。并不需要分配动态内存。
梦幻樱雪

2024-10-03 07:29:35

a=(char *)malloc(10*sizeof(char));
a="abc";
这两个语句重复给 a 赋值,前一个赋值就作废了,申请到的空间也就被丢弃了。
下面一个赋值是让a指向一个系统中字符常量区的地址(只是把一个地址赋值给a,并不是把字符串赋值给a)。
春日山杏

2024-10-03 07:51:32

就算不动态分配也可以直接赋值啊。建议先学习一下什么是指针,搞清楚指针和数组的区别。
五品带砖侍卫

2024-10-03 21:47:00

1、之所以要动态的分配内存是因为有些时候在编写程序的时候无法确定其占用的内存大小,这个时候就可以动态的分配给其一段内存空间,等到程序运行时在具体确定所需要的内存单元空间。
2、动态分配的内存空间是在堆(heap)上申请的,这部分的内存空间是有程序员自己管理的,需要程序员自己负责这些内存空间的释放,使用free函数。