Как я могу создать массив указателей и указать его на NULL, используя **P?

Как я могу создать массив указателей с помощью **P и указать его на NULL?

Допустим, я закодировал, как показано ниже.

struct s
{
    float  a ;
    char x ;
} ;

s  **p ;

p = new ( s  * [10] ) ;

Теперь я хочу сделать некоторые из них как NULL

p[0] = NULL ;

p[5] = NULL ;

Если я просто закодировал, как указано выше, то это выдает мне предупреждение, а также приведенный выше метод неверен в том, как он делает переменную NULL. Так как мне это сделать?

4 ответа

Если вам нужно, чтобы элементы массива были инициализированы нулями, вы можете написать

p = new s * [10] {};

Так должно быть

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;

Я закодировал это

#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 и не получил ни предупреждения, ни ошибки.

Поэтому, пожалуйста, предоставьте весь код, который вы пытаетесь скомпилировать, и вывод компилятора. В противном случае вам трудно помочь.

Это должно дать вам массив указателя типа S длиной 10, все из которых содержат ноль. Я бы привык к использованию nullptr. NULL - 0 типа int, где 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;
    }
}

nullptr был добавлен в C++ 11, чтобы компилятор знал разницу между вызовом этих двух функций.

void setValue(int value);

void setValue(int* pointer);
Другие вопросы по тегам