//line 2 causes the program to terminate
#include <stdio.h>
int main()
{
int *qi = 0; //1 -- making qi a null pointer
if(qi==NULL) printf("Null\n");
else printf("Not Null\n");
*qi =0; // 2 --- assigning *qi a decimal zero value.
return 0;
}
комментарий № 2 в приведенной выше коде завершает программу, тогда как при добавлении одной строкиНазначения десятичного нуля на указатель C
qi = &zero;
в коде выше, перед тем комментарием № 2 предотвращает это, как показано ниже
// this code works fine
#include <stdio.h>
int main()
{
int *qi = 0; //1
if(qi==NULL) printf("Null\n");
else printf("Not Null\n");
int zero =0;
qi = &zero;
*qi= zero; //2
printf("%d\n",*qi);
return 0;
}
Почему это происходит? Объясните, как будто вы объясняете ребенку.
Без правильно выделения блока 'SizeOf int' байтов в адрес памяти 0, оператор' * ци = 0 '(предшествуют ' qi = 0') дает неопределенное поведение. И с 'qi = & zero', вы устанавливаете' qi' для указания на правильно выделенный блок байтов sizeof int', который позволяет вам безопасно выполнять '* qi = 0'. –
@barakmanos Спасибо :) – zerobyzero
Добро пожаловать :) –