2013-03-16 91 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

相关问题