【问题标题】:How can I create an array of pointer and points it to NULL using **P?如何创建一个指针数组并使用 **P 将其指向 NULL?
【发布时间】:2013-11-26 10:20:19
【问题描述】:

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

假设我的编码如下。

struct s
{
    float  a ;
    char x ;
} ;

s  **p ;

p = new ( s  * [10] ) ;

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

p[0] = NULL ;

p[5] = NULL ;

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

【问题讨论】:

  • 你看到了什么警告?
  • 语句对指针指向 null 的行没有影响。
  • 别忘了标记答案...
  • 根据我的要求,没有一个答案是正确的......

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


【解决方案1】:

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

p = new s * [10] {};

【讨论】:

  • 我不需要所有元素都设为零或 NULL,我只需要其中一些元素,而且它也会在我的电脑上产生编译错误。
【解决方案2】:

应该是

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;

【讨论】:

  • 两者都是一样的,我们可以将其编码为 p = new s *[10] ;或 p=new ( s * [10] ) ;
  • 那么警告是什么?
  • @timaru 没有错误信息。这给出了一条警告消息,并且这样做是非法的,如果我们按照上面的代码进行编码,则在某种意义上是非法的,它不能设为 NULL。可能会导致指针的指针不能设为 NULL。
【解决方案3】:

我已经编码了

#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 进行编译,没有收到警告或错误。

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

【讨论】:

  • @sonu 我得到了你给我的代码,当你尝试将 deque 的结果传递给 inque 时出现问题,因为你已经对 inque 进行了 decalar 以获取对指针的引用,你可以进行引用仅来自左值,但 deque 返回右值,因此将 inque 参数类型从 dary *& 更改为 dary *。但是您的代码很难阅读,我无法理解您的问题如何与您在上面的评论中提供的代码相关联。
  • OK 忘记该语句并检查 crate 函数的语句。我使用 new 创建点 cptr 并使用 for loop 将它们全部设置为 NULL 。在 for 循环中,使其为 NULL 无效。
  • @ just textuploader.com/d3uk 试试这个上传的新版本,修改后的 inque 参数。
【解决方案4】:

这应该给你一个长度为 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);

【讨论】:

  • 在像 code:blocks 这样的旧编译器中,cfree 不支持 nullptr。
  • 抱歉,我以为这是标准。
猜你喜欢
  • 2020-03-26
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2016-04-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多