指針和數組的轉換

本人喜歡例子說明。。

<pre name="code" class="cpp"><span style="font-size:18px;">#include <stdio.h>

int main()
{
	int arr[4] = {1,2,3,4};
	int *p_arr = arr;
	int i = 0;
	printf("數組正常打印\n");
	for( i = 0; i < 4; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

	printf("數組以指針形式\n");
	for( i = 0; i < 4; i++)
	{
		printf("%d ", *(arr+i));
	}
	printf("\n");

	printf("指針數組正常打印\n");
	for( i = 0; i < 4; i++)
	{
		printf("%d ", *(p_arr+i));
	}
	printf("\n");

	printf("指針以數組形式打印\n");
	for( i = 0; i < 4; i++)
	{
		printf("%d ", p_arr[i]);
	}
	printf("\n");
	return 0;
}</span>



從這例子可看出在一個函數內,指針和數組是可以相互表示的。


以下說明一下數組和指針在 調用函數被調用函數  的關係

#include <stdio.h>
#include <stdlib.h>

int *test_one(int *arr, int size)
{
	
//	int tmp_arr1[4];	
//	注意這裏通過創建數組返回給調用函數是失敗的
//	因爲在函數返回時,數組就會被銷燬,產生無效值,看到也只有首地址的值。

//	以下通過自己分配內存實現將在被調用函數中創建的數組返回給調用函數
	int *arr1 = (int*)malloc(4*sizeof(int));
	int i = 0;
	for(i = 0; i < size; i++)
	{
		printf("%d ", arr[i]);
//		tmp_arr1[size] = arr[i];
		arr1[i] = arr[i];
	}
	printf("\n");
	return arr1;
}

int main()
{
	int arr[4] = {1,2,3,4};
	int *p_arr;
	int arr_one[4];
	p_arr = test_one(arr, 4);//通過指針接收函數的指針返回值。
	int i = 0;
	for(i = 0; i < 4; i++)
	{
		arr_one[i] = p_arr[i];//這裏可以看出指針是可通過數組表示的。
		printf("%d ",*(p_arr+i));
	}
	printf("\n");

	free(p_arr);//個人分配的內存,就自己儘量銷燬
	p_arr = NULL;
	
	return 0;
}


個人總結:

1.   在一個同一函數內指針和數組是可以相互表示的,建議多用指針。

2.   儘可能不要,在被調用函數中試圖創建數組,並將其返回,這是不合理。

      所以我們應該在調用函數就聲明好一個數組,將其傳入被調用函數中,以供使用。

3.  如果真的要在被調用函數創建數組並返回,請自己分配內存(如malloc),這裏比較常用到時在項目初始化時。

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