указать как индекс массива - PullRequest
0 голосов
/ 27 марта 2019

Мой фон - C #, у меня есть следующий код (на C), который мне нужен, чтобы сказать, какой будет вывод:

#include <stdio.h>
#define N 10
int main()
{
    int a[N] = { 3,4 };       //<-- [3][4][0][0][0][0][0][0][0][0]
    int *q = a;              //<-- some address
    char s[N] = "abcdefg"; 
    int k = s[*a] - s[a[*q]]; //<-- what is that mean ?
    char *p = s;
    a[k] = k;
    printf("%d %s\n",k,p+a[k]);
    printf("%d %d %d %d %d",q[0],q[1],q[2],q[3],q[4]);
    return 0;
}

Может кто-нибудь объяснить, пожалуйста, о строке номер 4?

Я не могу понять s[*a] это значит s при индексе *a?но *a - это адрес, а не целое число.тот же вопрос о s[a[*q]]

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Учитывая

int k = s[*a] - s[a[*q]];

Сначала *a получает значение a[0], равное 3.

Мы знаем, что q == a, поэтому *q совпадает с *a, что опять-таки является значением 3. Значение в a[3] равно 0.

Итак, теперь у нас есть s[3] - s[0], то есть 'd' - 'a', то есть 3 (при условии кодировки ASCII), значение, распечатанное для k.

0 голосов
/ 27 марта 2019

Без остальной части кода неясно, будет ли он работать вообще. Что такое N, например?

В частности, s[*a]: a - это имя массива. *a совпадает с a[0], потому что a - указатель на первый элемент. Итак, *a равно 3, а s[*a] равно s[3], то есть символ 'd'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...