Программирование на C - передача по ссылке - PullRequest
6 голосов
/ 05 августа 2010

В программе на C ниже я не понимаю, почему buf [0] = 'A' после вызова foo.Разве foo не выполняет передачу по значению?

#include <stdio.h>
#include <stdlib.h>

    void foo(char buf[])
    {
      buf[0] = 'A';
    }

    int main(int argc, char *argv[])
    {
      char buf[10];

      buf[0] = 'B';
      printf("before foo | buf[0] = %c\n", buf[0]);
      foo(buf);
      printf("after foo | buf[0] = %c\n", buf[0]);

      system("PAUSE"); 
      return 0;
      }

вывод:

before foo | buf[0] = 'B' 
after foo | buf[0] = 'A'

Ответы [ 12 ]

0 голосов
/ 05 августа 2010

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

Если вы хотите сохранить содержимое исходного массива, вы можете скопировать строку во временное хранилище в функции.

edit: Что бы произошло, если бы вы завернули свой массив символов в структуру и передали структуру? Я считаю, что это тоже может сработать, хотя я не знаю, какие издержки могут возникнуть на уровне компилятора.

0 голосов
/ 05 августа 2010

чтобы передать это по значению, функция должна знать размер аргумента. В этом случае вы просто передаете указатель.

...