-2

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

假设我编码如下。

struct s
{
    float  a ;
    char x ;
} ;

s  **p ;

p = new ( s  * [10] ) ;

现在我想将其中一些设为 NULL

p[0] = NULL ;

p[5] = NULL ;

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

4

4 回答 4

0

如果您需要将数组的元素初始化为零,您可以编写

p = new s * [10] {};
于 2013-11-13T17:22:07.407 回答
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;
于 2013-11-13T17:22:27.707 回答
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并没有收到警告或错误。

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

于 2013-11-13T17:37:40.613 回答
0

这应该为您提供一个长度为 10 的 S 类型指针数组,全部包含 null。我会养成使用 nullptr 的习惯。NULL 是 int 类型的 0,其中 nullptr 是 void* 类型的 0(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);
于 2013-11-13T18:36:01.180 回答