2013-03-16 118 views
0

我有一個數組。如何聲明指向另一個數組元素的指針數組

char tab[200];

,然後我想創建數組,由指針到以前的數組元素

char** t = new (char*)[LENGTH]; 

但我得到

C:\Users\Duke\Desktop\PJC3\main.cpp|37|error: array bound forbidden after parenthesized type-id| 

我應該如何將它聲明動態地

EDIT:這是否正確指向tab數組的相應元素?

char** t = new char*[dlugoscTab]; 

for(int i = 0; i < dlugoscTab; i++){ 
    *(t + i*sizeof(char)) = (tab + i*sizeof(char)); 
} 
+0

爲什麼括號?你讀過錯誤信息了嗎? – jalf 2013-03-16 16:25:31

+0

'std :: vector t(LENGTH,nullptr);' – Fanael 2013-03-16 16:26:27

回答

2

要做到這一點你試圖,你需要ju ST擺脫括號:

char** t = new char*[LENGTH]; 
for (i = 0; i < LENGTH; i++) { 
    t[0] = &tab[i]; 
} 

然而,似乎沒有太大的理由在這裏使用動態分配的,因此就使用的char*數組:

char* t[LENGTH]; 
for (i = 0; i < LENGTH; i++) { 
    t[0] = &tab[i]; 
} 

或更好但使用標準容器如std::arraystd::vector

在你編輯的作業不正確:

*(t + i*sizeof(char)) = (tab + i*sizeof(char)); 

工作在這種情況下,只是因爲sizeof(char)是1.你不應該在這裏涉及sizeof。向指針添加1不會將其移動1個字節,但會將其移動到指向它指向的類型的下一個對象。你應該做的事:

*(t + i) = (tab + i); 

但正如我已經寫在上面我的例子,這正是更容易理解:

t[i] = &tab[i]; 
+0

謝謝!那我的編輯呢?那是對的嗎?我想指出另一個數組的元素。 – Yoda 2013-03-16 16:30:58

+0

@RobertKilar我編輯了我的答案 - 這是不正確的。擺脫'sizeof(char)'。 – 2013-03-16 16:33:25

+0

太棒了!謝謝。 – Yoda 2013-03-16 16:35:56

2
char** t = new (char*)[LENGTH]; 

應該是:

char** t = new char*[LENGTH]; 

如果你想在ti個元素爲指向i個元素在tab,你可以簡單地做到這一點,像這樣:

for(int i=0; i<LENGTH; i++) 
    t[i] = & tab[i]; 
+0

謝謝你是那麼做的那樣編輯 – Yoda 2013-03-16 16:27:49

+0

@RobertKilar你不需要添加'sizeof(char)',指針算術自動將因子類型的大小。此外,你所做的事情要比它需要的複雜得多。只需使用't [i] =&tab [i]'。這樣就清楚你的意思了。 – JSQuareD 2013-03-16 16:34:08

0

正確的語法是:

char (*t)[LENGTH] = new char(*)[LENGTH]; 

但分配沒什麼意義,因爲它只分配一個指針,而不是數組。

+0

該代碼應該做什麼? – JSQuareD 2013-03-16 16:31:44

+0

@JSQuareD這個聲明並動態地分配一個指向LENGTH字符數組的指針,這偶然不是OP想要的。 – 2013-03-16 17:14:55

相關問題