int oddNums[5] = {1, 3, 5, 7, 9};
Это создает массив из 5 int
с. Если вы обратитесь к oddNums[2]
, это даст вам 5
. Если вы ссылаетесь на oddNums
, это указатель на int
, который указывает на начало массива. Так что *oddNums
даст вам 1, *(oddNums+1)
даст вам 3 и так далее.
char str[20] = "Hello world";
См. Мои обсуждения около oddNums
, которые применимы здесь. Это также строка, которая означает, что она заканчивается нулем после буквы d
.
int *ip = oddNums;
Помните oddNums
является указателем на целое число. Таким образом, это просто копирует его другому указателю int
под названием ip
.
char *cp = str + 6;
Это присваивает значение (str + 6)
к char
указателя cp
. str
является указателем char
, указанным выше. Он указывает на начало строки «Hello world».
printf("\n.%d",*(++cp) + *oddNums);
*(++cp)
означает получить то, что cp
указывает на послеcp
было увеличено. Другими словами, preincrementcp
, а затем получить то, на что он указывает. cp
указывал на str
+ 6, который был w
в строке.Но ++cp
указывает на «o» в «мире». Таким образом, *(++cp)
даст «o».
Затем 'o' добавляется к чему-либо oddNums
указывает на. Ничего не случилось с oddNums
, так как мы начали, поэтому он все еще указывает на 1 в массиве integer. *oddNums
говорит «дайте мне то, что oddNums
указывает на», который является 1.
Таким образом, значение *(++cp) + *oddNums
будет 'o' + 1
, что «р» (следующая буква в последовательности ASCII).
Интересно, что printf
говорит, что «напечатать то, что вам дано как целое число после печати строки и периода» («\ n.% D»). Поэтому результат будет ... .112
. Я думаю.
Он нуждается в '#include' и '#include '. –