读书人

函数内的字符指针与字符数组占用内存储

发布时间: 2012-08-21 13:00:21 作者: rapoo

函数内的字符指针与字符数组占用内存的区别
现在又两个函数,作用都是动态分配内存。现如下

char *GetMemory(int num)
{
char *p=(char *)malloc(sizeof(char)*num);
return p;
}

char *GetString(void)
{
char p[]="hallo";
return p;
}

第二个函数是栈内存的指针,在函数调用结束后会自动消亡,但是第一个函数的p指针也是于栈内存的指针,但是在编译的时候,是第二个函数编译错误,那么我就不明白了。求解

另外:char *p1和char *p2[]的定义中,p1和p2不都是指针么,大家说一说这两个在内存中的区别是什么??


[解决办法]
>第二个函数是栈内存的指针,在函数调用结束后会自动消亡,但是第一个函数的p指针也是于栈内存的指针,但是在编译的时候,是第二个函数编译错误,那么我就不明白了。求解

第一个函数的P指针指向堆(Heap),第二个函数的P指针指向栈(Stack),那个字符串在函数的栈上。函数调用返回后,栈上的数据可能会被覆盖。

〉char *p1和char *p2[]的定义中,p1和p2不都是指针么,大家说一说这两个在内存中的区别是什么??
p1指向一个字符,p2指向一个字符数组,也就是多个(也可能是1个)字符。
[解决办法]
第一个函数里p指针虽然也是栈里的,但是它指向一块申请了(malloc)的内存地址。所以可以return获得地址。
第二个函数里的p指针指向的内容也是临时的内存,函数结束就释放了。所以return时获得不了什么。
char *p1和char p2[](你这里多写了一个*号吧?如果有*号就变成是一个数组了)的定义中, p2就是指向数组首元素首地址的指针,p1就是一个普通的指针。
ps:C语言中,数组名被解析成一个指向数组中首元素首地址的指针。

个人浅见,如有错误,请高人指正。

读书人网 >C语言

热点推荐