2015-11-21 4 views
0

СЛУЧАЙ 1:гр указателей ошибки сегментации

#include <stdio.h> 
int main() 
{ 
int a = 5,*p; 
*p = &a; 
    printf("%d",*p); 
} 

выше упомянутая программа дает проблему ошибки сегментации. но в случае 2 он отлично работает. ПРИМЕР 2:

#include <stdio.h> 
int main() 
{ 
int a = 5,*p = &a; 
printf("%d",*p); 
} 

может кто-нибудь, пожалуйста, объясните эту проблему. Спасибо.

+0

Да, любой учебник на языке начинающих C может объяснить проблему. Поиск, чтение; ужасный dictu, думаю. (Это тривиально. **) –

+0

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что Stack Overflow не является учебным сайтом для новичков. –

+0

Тип 'p' -' int * '. Вы назначаете 'p' в случае 1, а не' * p'. – wimh

ответ

4
*p = &a; 

разыменовывает p и назначает &a в ячейку памяти pуказывает на. Указатель не инициализирован, поэтому его разыменование дает неопределенное поведение (таким образом, ошибка сегментации).

int a = 5,*p = &a; 

Определяет a и p, где звездочка не указывает разыменования, но отличает обычное int определение из определения в int* указателя. Линия эквивалентна

int a = 5; 
int* p = &a; 
Смежные вопросы