1,函數傳參靜態數據,指針的對比:
#include<stdio.h>
char* array_return()
{
char array[] = "hello word";
printf("array = %p\n",array);
return array;
}
char* static_array_return()
{
static char static_array[] = "hello world";
printf("static_array = %p\n",static_array);
return static_array;
}
char* pointer_return()
{
char *pointer = "hello word";
printf("pointer = %p\n",pointer);
return pointer;
}
int main()
{
char *s1 = NULL;
char *s2 = NULL;
char *s3 = NULL;
s1 = array_return();
s2 = static_array_return();
s3 = pointer_return();
printf("array_return= %s\n",s1);
printf("static_array_return= %s\n",s2);
printf("pointer_return= %s\n",s3);
return 0;
}
棧區數據是不能實現傳遞的:棧區數據是個局部變量,只是把字符串"hello word!"進行了拷貝,該局部變量是存放在棧中的,當函數退出時,棧被清空,p會被釋放,因此返回的是一個已經被釋放的內存地址,這樣做是錯誤的。