如何使用** P创建一个指针数组并将其指向NULL?

时间:2013-11-13 17:15:17

标签: c++ c arrays pointers null-pointer

如何使用** P创建一个指针数组并将其指向NULL?

假设我编码如下。

struct s
{
    float  a ;
    char x ;
} ;

s  **p ;

p = new ( s  * [10] ) ;

现在我想把它们中的一些作为NULL

p[0] = NULL ;

p[5] = NULL ;

如果我只是如上编码那么它会给我一个警告,而且上面的方法在如何使变量为NULL时也是错误的。那我该怎么做呢?

4 个答案:

答案 0 :(得分:0)

如果你需要对数组的元素进行零初始化,你可以编写

p = new s * [10] {};

答案 1 :(得分:0)

应该是

p = new s*[10];
p[0] = NULL;
p[5] = NULL;

如果错误类似于

error: ‘NULL’ was not declared in this scope

然后,

#include <cstdlib>

在开头,或

p[0] = 0;
p[5] = 0;

答案 2 :(得分:0)

我编码了这个

#include<cstdlib> //NULL definition

struct s{
  float a;
  char c;
};

int main (int argc, char **argv){
  s **p = new s*[10];
  p[0] = NULL;
  p[5] = NULL;
  return 0;
};

在test.cpp中并使用g++ ./test.cpp进行了编译,没有任何警告或错误。

因此,请提供您尝试编译的完整代码和编译器输出。否则很难帮助你。

答案 3 :(得分:0)

这应该给你一个长度为10的S型指针数组,都包含null。我会进入使用nullptr的习惯。 NULL为int类型的0,其中nullptr为0 *类型为void *(void指针)

struct S
{
    float  a ;
    char x ;
};

int main()
{
    S** p = new S*[10];

    for(int i = 0; i < 10; i++)
    {
        p[i] = nullptr;
    }
}
在C ++ 11中添加了

nullptr,以便编译器知道调用这两个函数之间的区别。

void setValue(int value);

void setValue(int* pointer);