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就再也找不到了……希望能帮到你。
a=(char *)malloc(10*sizeof(char));a="abc";这两个语句重复给 a 赋值,前一个赋值就作废了,申请到的空间也就被丢弃了。下面一个赋值是让a指向一个系统中字符常量区的地址(只是把一个地址赋值给a,并不是把字符串赋值给a)。
1、之所以要动态的分配内存是因为有些时候在编写程序的时候无法确定其占用的内存大小,这个时候就可以动态的分配给其一段内存空间,等到程序运行时在具体确定所需要的内存单元空间。2、动态分配的内存空间是在堆(heap)上申请的,这部分的内存空间是有程序员自己管理的,需要程序员自己负责这些内存空间的释放,使用free函数。