char* p and char a[]有關

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

#include<stdio.h>

#include<stdlib.h>

char *function1()

{

char *a="cdefgh";//在靜態存儲區分配,一直到程序結束

return a;

}

char *function2()

{

char a[]="cdefgh";//在棧中分配,函數結束時釋放

return a;

}

char a[]="cdefgh";

/*這個是常量字串的拷貝,

相當於strcpy(a,"cdefgh"),

這樣寫都會有字串拷貝,

造成時間和空間上的開銷,

如果字串很長儘量不要這樣寫,

由於字元陣列a在棧上,

所以在函數結束後它便無效了..

---------------

char *a="cdefgh";

a直接指向常量字串,

這個字串保存在靜態存儲區中...

所以在函數結束後,它返回的位址仍然有效..

*/

int main()

{

char test[]="123";

test[0]='a';//可以修改數組內部元素的值

char* test1="456";

*test1='7';//test1不可以修改,是const char*的類型的值

/*char *a="cdefgh";

此時a為const char*,

也就是說你不能改變*a的值。

char a[]="cdefgh";你可以通過a[i]改變它的值。*/

char *i=NULL ;

char *j=NULL;

i= function1();//結吉確定

j= function2();//結果不確定

printf("\n%s\n",i);

printf("\n%s\n",j);

system("pause");

}

/*(1)function1()的a和function2()的a都是自動變數,都在棧上分配空間

(2)function1()的a分配的空間=sizeof(char *)=sizeof(void *),

任何指標的大小都是相同的,指向靜態資料區存的"cdefgh"

(3)function2()的a分配的空間=strlen("cdefgh")+1,並且用來保存"cdefgh"

(4)返回的指標,function1指向靜態資料區,function1指向棧(已自動釋放)

故function1的值是對的

*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航