Язык C — ежедневные вопросы с несколькими вариантами ответов — день 56

 Блоги, связанные с указателями

Первый снимок указателя: семейство указателей — блог CSDN

Углубленное понимание: разыменование и добавление переменных-указателей — блог CSDN

Первый вопрос

1. Какое из следующих утверждений верно ()

A: '\0' означает символ 0

B: «a» представляет собой символьную константу.

C: Выражение: 'a' > 'b' оценивается как ложное;

D: '\"' незаконно

Ответ и анализ C

Этот вопрос проверяет основы

О: Значение ASCII символа «\0» равно 0, а значение ASCII символа «0» равно 48, поэтому они разные;

B: «a» — это строка со скрытым символом \0. Обратите внимание, что это двойная кавычка!

C: Верно, просто посмотрите на значение ASCII.

D: ' \" ', это escape-символ, \ меняет исходное значение следующего ", поэтому \" - это новый символ, правильное использование.

вопрос 2

2. Известно, что int a[] = {0,2,4,6,8,10}, *p = a+1, выражением, значение которого равно 0, является ( )

А:* (п++)

Б:*(++р)

С:*(п--)

Д:*(--p)

Ответ и анализD

Поскольку мы так долго дружим, этот вопрос не должен стать проблемой!

Во-первых, p указывает на адрес второго элемента массива a. Если значение равно 0, адрес первого элемента массива необходимо получить через p.

Следовательно, p необходимо уменьшить, чтобы исключить AB;

Разница между CD заключается в предлоге -- и послепозиции --. Значение выражения префикса -- это значение после --, послелог -- это значение перед --;

Итак, D:--p — адрес первого элемента массива; *(--p) = *a = 0;

Вопрос 3

3. На языке C следующие операции присваивания строк могут выполняться корректно ()

A: char s[5]={"ABCDE"};

B: char s[5]={'A','B','C','D','E'};

C:символ *s; s="ABCDE";

D:символ *s; сканирование("%s",s);

Ответ и анализ  C

В языке C строки должны заканчиваться на '\0', поэтому при присвоении значения строке необходимо присваивать \0;

A: s определяется как массив символов из 5 элементов, то есть он может хранить до 5 символов, а символ конца строки '\0' не может быть сохранен;

B: Присвоение массиву правильное, но, как и в случае A, здесь нет символа конца строки '\0';

D: Назначение «дикого указателя» неверно:

C: Сначала определите указатель символа s, а затем присвойте первый адрес строки «ABCDE» переменной указателя s, s указывает на эту строку.

Вопрос 4

4. Результатом выполнения следующей программы на языке C является ()

#include <stdio.h>
int main() 
{
    int a[5] = {
    
    1, 2, 3, 4, 5};
    int *ptr=(int *)(&a + 1);
    printf("%d, %d",*(a + 1), *(ptr - 1 ));
    return 0;
}

А: 2, 5

Б: 1, 3

С: 1, 5

Д: 2, 43586

Ответ и анализ А

Я помню, что этот вопрос возник три раза, это очень классика!

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

Углубленное понимание: разыменование и добавление переменных-указателей — блог CSDN

Вопрос 5

5. Выходной результат следующей программы: ()

#include <stdio.h> 
int main() 
{
    char str1[] = "hello world";  
    char str2[] = "hello world";  
 
    const char str3[] = "hello world";  
    const char str4[] = "hello world";  
 
    const char* pstring1 = "hello world";  
    const char* pstring2 = "hello world";  
 
    if(str1 == str2) 
        printf("true,");
    else
        printf("false,");

    if(str3 == str4) 
        printf("true,");
    else
        printf("false,");

    if(pstring1 == pstring2) 
        printf("true\n");
    else
        printf("false\n");
        
    return 0;
}

А: ложь, ложь, правда

Б: ложь, ложь, ложь

С: правда, правда, правда

D: ложь, правда, правда

Ответ и анализ А

Этот вопрос проверяет, равны ли сравниваемые переменные.

Первая группа

        Эта группа сравнивает имя массива, которое является адресом первого элемента, то есть, если два адреса одинаковы, они должны быть разными, потому что это две разные переменные, и обе переменные будут выделены в стеке. , а затем сохраните строки отдельно;

Вторая группа имеет ту же истину, что и первая группа.

Третья группа

Это означает определение двух переменных-указателей в области стека, указывающих на строку, и эти две переменные-указатели являются адресами первых элементов сохраненной строки. Итак, сравнивается адрес первого элемента этой строки; но эта строка определена в области констант, поэтому верхняя и нижняя строки одинаковы. Поскольку наша система очень умна, строки в области констант считываются. -только. Не может быть изменено. Так что нет необходимости приобретать две струны.

Supongo que te gusta

Origin blog.csdn.net/2302_76941579/article/details/135115882
Recomendado
Clasificación