В вашем случае вы пытаетесь инициализировать указатель с помощью заключенного в скобки списка инициализаторов int
s, что недопустимо.
int *intp = {1,2,3,4,5};
Если вы пытаетесь скомпилировать код с включенными надлежащими предупреждениямивы увидите предупреждающие сообщения компилятора, такие как
source_file.c: In function ‘main’:
source_file.c:9:18: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
int *intp = {1,2,3,4,5};
^
source_file.c:9:18: note: (near initialization for ‘intp’)
source_file.c:9:20: warning: excess elements in scalar initializer
int *intp = {1,2,3,4,5};
^
source_file.c:9:20: note: (near initialization for ‘intp’)
source_file.c:9:22: warning: excess elements in scalar initializer
int *intp = {1,2,3,4,5};
^
source_file.c:9:22: note: (near initialization for ‘intp’)
source_file.c:9:24: warning: excess elements in scalar initializer
int *intp = {1,2,3,4,5};
^
source_file.c:9:24: note: (near initialization for ‘intp’)
source_file.c:9:26: warning: excess elements in scalar initializer
int *intp = {1,2,3,4,5};
Это утверждение в вашем коде является нарушением ограничения и не означает ничего значащего.Для скаляра инициализатор должен быть одним выражением: как указано в C11
, глава §6.7.9
Инициализатором скаляра должно быть одно выражение, необязательно заключенное в фигурные скобки.[...]
Таким образом, заключенный в скобки список не является подходящим инициализатором для скаляра.
Вы можете изменить указатель на массив и инициализировать его с помощью инициализатораоператор, но не указатель.
Затем, позже, когда вы пытаетесь разыменовать, вы по существу делаете попытку разыменовать недопустимую память, которая вызывает неопределенное поведение .
Изменение кода на что-то вроде
int intp[] = {1,2,3,4,5};
сделает эту работу.