2010-03-04 104 views
1

我只是试图让我周围的各种指针概念的头,我有以下代码:指向内存分配指针的指针,为什么这是错误的?

char** a = new char*; // assign first pointer to point to a char pointer 

    char b[10] = "bla bla"; 
    *a = new char; //assign second pointer a block of memory. -> This looks wrong to me!! 
    (**a) = b[2]; 

那么,什么是错的第二个“指针”的内存分配?它运行和东西,但它只是感觉不对。

编辑:

感谢您澄清这一点!我学到了东西!

+4

呃....没有错。 – Yacoby 2010-03-04 09:35:46

+0

你为什么觉得有什么问题?如果你试图把'* a'当作C字符串,那么*你不能,否则你的代码就没问题。 – 2010-03-04 09:37:14

+0

其技术上正确。但是你究竟想要达到什么目标? – 2010-03-04 14:35:23

回答

1

*a = new char;表示您使用其默认构造函数创建单个char变量。 这相当于*a = new char();而你刚创建的变量的地址赋给指针

2

它没有什么不对,除了使用动态内存分配,在C++中的风格相当糟糕。

+0

那么你如何以良好的C++风格来做呢? – 2010-03-04 09:37:36

+1

char a ='a'; ...或者如果因为一些不明原因需要双指针,char a ='a'; char * ap =&a; char ** app = ≈ – Tronic 2010-03-04 09:58:09

2
char** a = new char*; // a is a pointer to a pointer to a type char. allocate a new pointer variable and make a point to it. 
char b[10] = "bla bla"; // define a char array. 
*a = new char; // allocate a new char and make the pointer whose address is in a point to it. 
(**a) = b[2]; // copy the 3rd char of b to the char whose address is pointed by a. 
1

它的“错”是目前尚不清楚的唯一原因。你显然同意它不清楚。

在某些情况下,类似的代码可能是“正确的”,如果名称更好,班级结构更好,则目标明确,消除对方法的怀疑。

0

它没有什么技术上的错误。

但是,显式分配指向指向同一页代码中单个元素的指针的指针并不常见。你不会经常这样做,因为你很少会说“如果你需要了解FooBar,请问汤姆,汤姆是我的”。

0

没有错,技术上。但它似乎很少使用这种风格。

相关问题