строка 3
edges[0] = arr;
несовместимые типы в назначении: arr
— это char *
, а edges[0]
— это int *
.
Происходит следующее:
int *edges[500];
char arr[] = {'c','d'};
arr[0] — это «c», а arr[1] — это «d»
edges[0] = arr;
Игнорируя совместимость типов, edge[0] указывает на int
по адресу, где находятся 'c' и 'd' (и, возможно, еще два неуказанных символа).
printf("%c %c", edges[0][0],edges[0][1]);
ребра[0][0] — первое целое число в ребрах[0]: это сочетание 'c', 'd' (и, возможно, еще двух неуказанных символов). Это значение преобразуется в unsigned char, в результате чего выводится символ 'c'.
edge[0][1] указывает на целое число сразу после сочетания 'c', 'd' (и, возможно, еще двух неуказанных символов). . Эта ячейка памяти не была инициализирована и вполне может находиться за пределами диапазона, к которому может получить доступ ваш процесс.
если вы печатаете int вместо 2 символов
printf("%d\n", edges[0][0]);
вы увидите смесь «c», «d» (и, возможно, два неуказанных символа).
Лучшее, что можно сделать, — правильно подобрать типы.
person
pmg
schedule
19.10.2009
-
должен быть там? - person Jacob   schedule 19.10.2009edges[0][0]
иedges[0][1]
в конечном итоге получают доступ к неинициализированной памяти. На моем компьютере программа печатаетc "
- person Sinan Ünür   schedule 19.10.2009c d
, а неc - d
? - person Jacob   schedule 19.10.2009