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

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

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

struct s
{
float  a ;
char x ;
} ;

s  **p ;

p = new ( s  * [10] ) ;

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

p[0] = NULL ;

p[5] = NULL ;

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

-2

Решение

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

p = new s * [10] {};
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;
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 и не получил ни предупреждения, ни ошибки.

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

0

Это должно дать вам массив указателя типа 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);
0
По вопросам рекламы [email protected]