簡體   English   中英

從 c 中的 function 返回數組時,static 數組聲明和指針數組聲明有什么區別

[英]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 返回值分配給名為arrayint指針。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM