我有以下代碼:指向N個數組的靜態指針,還是指向N個靜態數組的指針?
const int N=3;
static double * p[N];
是否p爲一個靜態指針指向一個N維double數組,或者與放置靜態指針的每個元件N維數組?
而且我發現下面的更改失敗編譯和不知道爲什麼......
int N=3;
static double * p[N];
我有以下代碼:指向N個數組的靜態指針,還是指向N個靜態數組的指針?
const int N=3;
static double * p[N];
是否p爲一個靜態指針指向一個N維double數組,或者與放置靜態指針的每個元件N維數組?
而且我發現下面的更改失敗編譯和不知道爲什麼......
int N=3;
static double * p[N];
p表示指向N維雙數組的靜態指針,還是指向每個元素代表靜態指針的N維數組?
幾乎第二選擇一個N大小的數組,每個元素代表一個靜態指針。請注意從「N維」到「N大小」的更改。謝謝@David。
而且我發現下面的更改失敗編譯和不知道爲什麼......
陣列需要爲他們的大小不變的整數。在刪除N
的「常量」後,在編譯時p
的大小不確定。
p
是3個指針靜態數組double
秒。
編譯器要求編譯時知道數組的大小,這就是爲什麼數組大小聲明只能使用const int
而不使用int
。
cdecl> explain static double *p[10];
declare p as static array 10 of pointer to double
還有cdecl.org在線獲得這種幫助。
只是基於這個和你以前的問題提示:你需要停止將'static'作爲類型的一部分。不是。你計算出事物的類型(在這種情況下「N指針的數組爲double」),然後你可以說它是靜態的。無論構成什麼對象都將具有靜態存儲持續時間。如果你的類型包含指針,它們指向的內容不是對象的一部分。它們完全是不同的對象,不一定是靜態的。你的問題中的聲明根本不會產生任何'雙'。它只是創建一些指針。這些指針是靜態的。 –
@sftrabbit現在我更清楚「靜態」不是該類型的一部分。例如。 「int * a,b;」聲明「a」爲指針,而「b」聲明爲「int」;然而,「int static a,b;」聲明「a」和「b」具有「靜態」持續時間。我對嗎? –
那麼'a'是一個「int指針」,而'b'只是一個「int」。但是,在第二個例子中,'a'和'b'都是靜態的。 –