2016-11-18 2 views
2
int* arr1 = {}; //ok: arr1 == NULL 
int* arr2 = {1,2,3};//error: scalar object requires one element in initializer 

Ich erwartete die Initialisierung von arr1, um den gleichen Fehler zu verursachen, aber es tut es nicht. Warum das?Warum ist int * arr = {}; legal?

Edited:
Thank @krzaq für die Antwort. Ich war verwirrt mit dem, worüber du geredet hast.
So sind die folgenden Aussagen sind alle legal:

int* arr1 = {}; 
int arr2[] = {1,2,3}; 
int* arr3 = {arr2}; 
+0

'int * arr3 = {arr2}' initialisiert nur den Zeiger 'arr3' an die Adresse des ersten Elements von' arr2'. Es macht es nicht zu einem Array. –

+0

Ja; Was ich gemacht habe, macht nur 'arr2' und 'arr3' die gleiche Adresse. –

Antwort

3

Sie verwirrt, sich mit falschen Namensgebung. arr1 und arr2 sind Zeiger, keine Arrays. Sie können einen Zeiger auf Null initialisieren, und Sie haben dies mit der exakten Syntax getan, die Sie für arr1 verwendet haben. Sie können einen Zeiger nicht mit einer initialisieren.

Wenn Sie das noch verwirrend ist, versucht, über eine abstrakte Art Argumentation:

using some_type = int*; 

some_type foo = {}; // ok, value-initialized 
some_type bar = {1,2,3}; // not ok, doesn't make sense to initialize 
         // bar with a list of ints 
some_type baz = "a string"; // also not ok, doesn't make sense