char *a = (char*)malloc(sizeof(char)*100);与char a[100];对于char *o=char *a有何区别
时间: 2023-07-23 20:56:50 浏览: 86
深入理解char *a与char a[]的区别
在第一行代码 `char *a = (char*)malloc(sizeof(char)*100);` 中,`a` 是一个指向字符的指针,它指向了连续的内存空间,这些内存空间可以存储 100 个字符。此时,`a` 指向的内存空间是在堆上动态分配的。使用完毕后,需要释放这些内存空间,否则会造成内存泄漏。
在第二行代码 `char a[100];` 中,`a` 是一个字符数组,它也可以存储 100 个字符。此时,`a` 的内存空间是在栈上自动分配的。在使用完毕后,无需手动释放内存空间。
而 `char *o = a;` 则是将指针 `o` 指向了指针 `a` 指向的内存空间,或者说是把 `a` 的地址赋值给了 `o`。这两个指针指向的是同一片内存空间,它们的区别在于它们的生命周期和内存空间的分配方式不同。需要注意的是,如果在使用 `o` 指向的内存空间时释放了 `a` 指向的内存空间,那么 `o` 指针将会指向一块已经释放的内存空间,这种情况称为悬垂指针,会导致程序异常。
阅读全文