2015-05-06 3 views
-3

, так что я учусь для окончательного и мы получили этот блок codeLC: Имея проблемы с размаху

#include <stdio.h> 
int a; 
void addOne(void) { 
    a++; 
    printf(“W. a = %d\n”, a); 
} 
int removeOne(int a) { 
    int b = a – 1; 
    printf(“R. b = %d\n”, b); 
} 
void swap(int a, int *b) { 
    int temp = a; 
    a = *b; 
    *b = temp; 
} 
int main() { 
    a = 5; 
    int b = 20; 
    if (b > 15) { 
     int a = 53; 
     removeOne(b); 
     addOne(a); 
     printf(“X. a = %d\n”, a); 
    } 
    printf(“Y. a = %d, b = %d\n”, a, b); 
    swap(a, &b); 
    printf(“Z. a = %d, b = %d\n”, a, b); 
    return 0; 
} 

Мы проинструктированы, чтобы дать выходы программы. У меня возникают проблемы с addone(a), где я придумал 54, правильный ответ был 6. Это 6, потому что когда функция объявлена, она имеет void (не помните технического термина, но информация, которую он принимает в функция), а не что-то вроде int a?

Мой более прямой вопрос, почему функция принимает a, инициализированный в основной функции, а не a в if?

+3

Этот источник не должен компилироваться. addOne() не принимает аргументы. Вы уверены, что все правильно? – BadZen

+0

Это то, что профессор выслал в качестве обзора для экзамена, поэтому я бы предположил так (скопируйте/вставьте прямо из обзора). Я только что увидел, что я взломал и не включил '# include' в блок кода, но, кроме того, он должен быть твердым. – JohnX

+0

' '- Пожалуйста, разместите юридический код C. –

ответ

0

Причина, по которой ответ 6:

Примечание на вершине, что a объявлен как глобальный. Позже, в main, есть вызов addOne(a) внутри кодового блока. Этот кодовый блок также определяет локальную переменную a. a, который передается в этой области, является локальным a (53). Он передается в функцию, которая принимает неназванную переменную void. Однако в этой функции имеется ссылка на a. Из-за видимости это будет глобальный a (5), поэтому a++ приведет к выводу 6.

Это ужасный вопрос экзамена.

Смежные вопросы