2010-09-28 101 views
0

假設,sizeof(int)和sizeof(int *)之間的區別是什麼?此語句是否爲int * numbers [] = {....}是否正確?

int numbers [20]; 
int * p; 

我覺得這是語句有效

p = numbers; 

但由於numbers是一個數組,作爲一個常量指針操作,這不是

numbers = p; 

,我們不能將值分配給常量。所以如果我們這樣做,那麼在初始化數組時,我們不能使用*numbers

+1

我不明白「在初始化數組時使用*數字」。 – 2010-09-28 09:40:21

+0

http://www.catb.org/esr/faqs/smart-questions.html – sellibitze 2010-09-28 09:43:41

+0

問題的標題與問題的主題不符。請儘量在將來更加精確,以便更容易回答,並且對於那些懷有同樣疑慮的其他人,可以找到解決方案。 – Francesco 2010-09-28 11:01:10

回答

3

INT編號[20]; int * p;

我認爲這是聲明是有效的

p = numbers;

但這不是

數= P;

因爲數字是一個數組,所以它是一個常量指針,我們不能將值賦給常量。

numbers不是一個常量指針,它是一個不可修改的lvalue所以你不能指定它。

sizeof(int)返回一個整數的尺寸上的任何特定的實施

sizeof(int*)一個指針的大小返回到一個整數。

sizeof()返回類型是size_t(無符號)

1

sizeof(int)返回用於存儲一個int

sizeof(int*)返回用於存儲指針

字節數要聲明的初始化可以使用以下語法整數的常數陣列的字節數:

int numbers[] = { 0, 1, 2, 3 }; 
1

sizeof(int)是數據類型的大小,sizeof(int*)是一個指針的數據類型的大小。

不能分配p來的數字,因爲數字被聲明爲固定長度基於堆棧的整數數組,它不是一個int指針(儘管它可以轉換爲一個)

-1

在簡單的話

int numbers [20];是一個整數陣列

int * p;是指針的整數; p存儲它指向的地址

numbers = p;是不可能的;兩者都是不同的類型,一個是int,另一個是int *

但是numbers[0] = *p;是可能的;在某個有效地址提供p點

+0

我想你的意思是'數字[0] = * p' – Necrolis 2010-09-28 09:59:00

+0

@Necrolis我不好,謝謝你指出 – Alam 2010-09-28 10:24:19

+0

和數字不是整數,它是一個20整數的數組。 – kriss 2010-09-28 10:41:14

相關問題