Как я могу создать массив указателей с помощью ** P и указать его на NULL?
Допустим, я закодировал, как показано ниже.
struct s
{
float a ;
char x ;
} ;
s **p ;
p = new ( s * [10] ) ;
Теперь я хочу сделать некоторые из них как NULL
p[0] = NULL ;
p[5] = NULL ;
Если я просто закодировал, как указано выше, то это выдает мне предупреждение, а также приведенный выше метод неверен в том, как он делает переменную NULL. Так как мне это сделать?
Если вам нужно, чтобы элементы массива были инициализированы нулями, вы можете написать
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);