[英]What is the difference between static array declaration and pointer array declaration when returning an array from the function in c
這里 CODE A 沒有給出任何錯誤,而 CODE B 給出了錯誤,表示賦值給數組類型的表達式,
CODE A 和 CODE B 之間的實際區別是什么?
int *input_array(int n)
{
int *array = malloc(sizeof(int) * n);
printf("Enter the elements of array: ");
for (int i = 0; i < n; i++)
scanf("%d", &array[i]);
return array;
}
int main()
{
int n;
printf("Enter the no.of elements : ");
scanf("%d", &n);
int *array;
array = input_array(n); CODE A // successful
int array2[n];
array2 = input_array(n); CODE B // error
}
>> CODE A 和 CODE B 的實際區別是什么?
要記住的幾點:
Arrays 不是指針。 它們是不同的1) 。
在 C 中,數組名稱是不可修改的左值2) 。
請注意,在您的代碼中, input_array()
function 返回的是int
指針而不是數組。 Arrays 無法返回,但您可以從 function 3)返回指向數組初始元素的指針。
在CODE A
中,您將input_array()
function 返回值分配給名為array
的int
指針。 input_array()
function 的array
變量類型和返回類型相同。 因此,分配是完全有效的。
CODE B
無效,因為您試圖分配給array2
,它是一個int
類型的數組,並且在 C 中,數組名稱是不可修改的左值。 您不能將任何內容分配給數組變量,而只能初始化/修改數組成員。
1)。 檢查這個。
2)。 來自 C11 Standards#6.3.2.1p1 [強調添加]
.... 可修改的左值是不具有數組類型、不具有不完整類型、不具有 const 限定類型的左值,並且如果它是結構體或聯合體,則不具有任何成員(包括,遞歸地,所有包含的聚合或聯合的任何成員或元素)具有 const 限定類型。
3)。 當您訪問一個數組時,它會被轉換為指向第一個元素的指針,但此規則很少有例外:
來自 C11 Standards#6.3.2.1p3 [強調添加]
3 除非它是 sizeof 運算符、_Alignof 運算符或一元 & 運算符的操作數,或者是用於初始化數組的字符串文字,否則類型為 ''array of type'' 的表達式將轉換為表達式類型為“指向類型的指針”,它指向數組 object 的初始元素,並且不是左值。 ……
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.