C 中 int a 和 int a 有什麼區別?

時間 2021-06-01 21:47:04

1樓:楊喚晨

做形參的時候,int a與int *a無任何區別。

眾所周知,陣列名本身就是指標 。如果宣告乙個int a[5]; 那麼a就是乙個指標。既然無區別,為什麼還要設定兩種形參呢?

顯然,這是考慮到了程式的可讀性。如果你希望傳遞陣列,就用前者;如果只是單純地想傳遞指標,就用後者

2樓:

int a 和 int *a :

在做函式形參時,無區別,並且 int a 為「活化石」寫法(即不推薦寫法,因為 int a不能顯式的表示出我們要傳遞的是乙個指標),但是有些程式設計師認為 int a 更好,因為 *a 不能表示出函式所需要的物件是陣列還是乙個單物件的指標。所以,仁者見仁,我個人更推崇int *a。

總結:這兩種寫法都表示我們要傳遞乙個指標,在函式內部可以對a賦其他值。(在用作陣列變數時,陣列名只能做「指標常量」,但做陣列型形式引數時,兩者相同)

3樓:

1.在很多情況下a[i]是等同於*(a+I)的,在編譯器編譯的過程中很多時候會將a[i]直接替換為*(a+i)。

a[i]申請的是乙個靜態陣列,而int a*申請的是乙個指標變數,比喻:這就好像是申請建築用地,a[i]在建築前即申請了一片空地,而a*申請的是乙個路標,你可以讓這個路標指向任何乙個建築。那麼可以發現,題主所說的int a[i]和int *a在這裡是有區別的,前者是申請好了一片空間,而後者則是乙個路標,還沒有申請空間。

3.那麼對於int a和int *a,當且僅當在函式定義時是相同的,其他情況均不同。

4.而對於a[i]和*(a+i),在大多數情況下可以等效,但是我們可以對*a的a進行自加,即a++,而不可以對a的a進行自加。因為a的a作為陣列首位址,是常量,而*a的a是變數,就像一片空地的位址是不能任意變化的,而路標是可以移動的。

5.由上面的比喻可以看出,int a[i](i為常數)是靜態陣列,即在設計時就需要考慮其大小,這樣帶來的缺點是空間大小固定,導致空間不夠用或者浪費。因而通過申請int a*(申請乙個路標),然後通過malloc函式申請一片空間(在建設工程中申請一片空地,這樣可以按照需求確定大小,然後讓路標指向這片空地),得到動態陣列(即申請的空間可以由變數大小確定)。

這種用法只能用int a*而不能用int a[i]。

6.最新的C99標準允許使用變長陣列,即a[i]的i可以是變數,這樣使用a[i]也可以按需申請空間了。

以上大部分來自C Primer Plus,如有錯誤請提出。

4樓:

上面的說得很對,但是太長了可能讓你糊塗。我簡要的跟你說明一下主要區別:

int a中的a,是乙個指標常量,我強調一下,是常量!它不是乙個變數。因此你可以對其取值,但是不可以進行a++,a--這樣的運算。

這就好比i = 5,5++是不行的,5是常數。而i++是可以的。

而int *a,這個a是乙個指標變數,這個是可以進行a++,a--運算的。

兩者作為函式的形參時,是沒有區別的。原因在於,c遵循的是值傳遞。

5樓:watashi

做引數傳遞時,沒有任何區別

void

gao(

chara,

charb[

65536])}

intmain

()至於目前排名最高的回答,真的不是問東答西了麼?

6樓:時國懷

引用自:C++陣列名可以看成指標麼?

指標和陣列名的共同特點是都是用來指代乙個位址的,在引數裡,沒有區別。

不同的是:

1、指標是需要占用記憶體空間來儲存位址的;陣列名則更像是乙個立即數或者常數。你可以修改指標指向的內容,但你絕對無法改變陣列名的指向。

2、陣列和指標對於sizeof來說是不同的,指標變數占用的空間通常等於當前CPU的最大位元組數(比如:32位CPU是4位元組),陣列名取sizeof的話,得到的則是陣列的大小。

3、如果用extern宣告乙個外部變數,指標和陣列不能混用。比如在檔案1.cpp裡宣告了char

ca="abcde",在檔案2.cpp裡如果要引用,那麼必須是extern char ca而不是extern char *

ca,因為前者是常數,後者是乙個占用了記憶體空間的有效的變數,區別還是很大的。

4、對陣列名取位址&是合法的,但有些編譯器不推薦這樣做,對陣列名取位址的結果與直接使用陣列名的結果是一致的,這是C語言的一種特殊規定。有乙個類似的效果就是函式名,假如func1是乙個函式名,那麼*func1==&func1==func1,這只是特殊用法,不代表函式名/陣列名真的可以這麼做。

int a 10 和int a 10 意義上有什麼區別嗎?

guozhi int a 10 是用來存放整型資料的 int a 10 是用來存放指標的,並且是整型指標 指標類似書的目錄,給計算機索引資料用的 踏雪飛鴻 這個2個都是陣列,只不過陣列裡面儲存的內容不同。int a 10 儲存10個整型資料的陣列。int b 10 儲存10個整型指標的陣列。void...

在C語言中 int a 10 指數組有10個元素,a 9 表示第十個元素,那a 10 去哪了呢求教

如果是這麼寫 int 10 a 表示有一變數a有10個int,然後記住取a中元素時是從0開始就行了,a 0 a 9 你的困惑是為什麼寫的時候出現了a 10 這個東西,用的時候沒有。這是C的設計問題,本來正確設計方式應該開頭那種,自始至終就沒有a 10 類似的坑還有指標的宣告方式 int p和int ...

若有int a 10 , p p a 為什麼p i和a i等價,但p 和a 不等價?

劉偉奇 陣列名就是陣列首元素的位址,是乙個常量指標,始終指向 a 0 那整型變數作模擬,對於這麼乙個整型產量 int n 你可以給n賦值 n 5 也可以讓他原地加1 n 可以在常量身上加變數 p 5 n 但是你可以 5 嗎?陣列名作為乙個常量指標也一樣。 深黑灰 P是乙個指標變數,a是乙個陣列,a實...