c语言指针和数组的转换,指针和数组的转换
本人喜歡例子說明。。
#include 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;
}
從這例子可看出在一個函數內,指針和數組是可以相互表示的。
以下說明一下數組和指針在 調用函數 和 被調用函數? 的關系
#include #include 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),這里比較常用到時在項目初始化時。
總結
以上是生活随笔為你收集整理的c语言指针和数组的转换,指针和数组的转换的全部內容,希望文章能夠幫你解決所遇到的問題。