Мне в место симловов строки виводит алфавит. Тоесть пишу например main() { char text[] = "Better to live running, than to die rotting"; char *wd = text; printf("%c", *wd+2); } выдает не 't' , а 'D' если написать wd+3 выдаст 'E' ;
Ну все верно выдает. *wd указывает на первый символ массива text[] ( 'B' ). *wd + 2 означает, "код символа, на 2 больший кода символа, на который указывает wd". Со спецификатором типа %c ( символ ) тебе и выводится символ, отстоящий на 2 от символа 'B'. А вот если написать *(wd+2), то выведется символ, позиция которого отстоит от позиции первого символы 'B' на 2, так как wd (без звездочки) - это номер ячейки памяти, а text[] - это статический массив, а это значит что его элементы расположены в памяти друг за другом, а не вразброс, что и позволяет получать разные символы строки, просто прибавляя разные числа к номеру ячейки памяти, хранящей первый элемент массива text[]. Итого: 1. wd - номер (адрес вообще-то) ячейки памяти, хранящей первый элемент массива text; 2. *wd - код первого символа массива text[]. 3. Сначала выполняется операция в скобках, а затем операция разыменования *, то есть дело в скобках.
Благодарю за видос!
Мне в место симловов строки виводит алфавит. Тоесть пишу например
main()
{
char text[] = "Better to live running, than to die rotting";
char *wd = text;
printf("%c", *wd+2);
}
выдает не 't' , а 'D' если написать wd+3 выдаст 'E' ;
Ну все верно выдает.
*wd указывает на первый символ массива text[] ( 'B' ).
*wd + 2 означает, "код символа, на 2 больший кода символа, на который указывает wd".
Со спецификатором типа %c ( символ ) тебе и выводится символ, отстоящий на 2 от символа 'B'.
А вот если написать *(wd+2), то выведется символ, позиция которого отстоит от позиции первого символы 'B' на 2, так как wd (без звездочки) - это номер ячейки памяти, а text[] - это статический массив, а это значит что его элементы расположены в памяти друг за другом, а не вразброс, что и позволяет получать разные символы строки, просто прибавляя разные числа к номеру ячейки памяти, хранящей первый элемент массива text[].
Итого:
1. wd - номер (адрес вообще-то) ячейки памяти, хранящей первый элемент массива text;
2. *wd - код первого символа массива text[].
3. Сначала выполняется операция в скобках, а затем операция разыменования *, то есть дело в скобках.