c 語言數組和指針傳參對比

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會被釋放,因此返回的是一個已經被釋放的內存地址,這樣做是錯誤的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章