[問題] 關於傳值的觀念

看板C_and_CPP作者 (I have a dream)時間13年前 (2013/02/15 12:35), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串1/1
版上的各位大大新年快樂! 是這樣的,原po最近開始自學C 所採用的書籍為K&R第二版(蔡文能 譯) 在1.8節 <傳值> 文中提到: "C所有函數均使用call by value,這表示傳過去的引數值是放在臨時性變數(在堆疊 中的副本)而不是原來變數" "在C程式中,函數不能直接改變叫用者的變數值,它只能改變自己那份暫時性的副本" 不過當我看到1.9節 <字符陣列> 時,它有一個範例: (讀入一篇文字並將最長的一列印出) ------------------------------------------------------------------------- #include <stdio.h> #define MAXLINE 1000 int getline(char line[], int maxline); void copy(char to[], char from[]); main() { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while((len = getline(line, MAXLINE)) >0) if (len > max){ max = len; copy(longest, line); } if(max > 0) printf("Longest line:\n%s\n",longest); getchar(); return 0; } int getline(char s[], int lim) { int c,i; for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) s[i] = c; if(c == '\n'){ s[i] = c; ++i; } s[i] = '\0'; return i; } void copy(char to[], char from[]) { int i; i = 0; while((to[i] = from[i]) != '\0') ++i; return; } ------------------------------------------------------------------------- 我想請教的是,主函數叫用函數getline時,是將變數line當作引數傳給getline 且getline執行完後,主函數裡的變數line也已經被設定(改變) 這是否與1.8節所提到的觀念不太一樣呢? 還是我領悟到的觀念有問題呢? 還請大大們解惑,感激不盡^^ -- 我跟你說你不要跟別人說如果你跟別人說就不要跟別人說是我叫你不要跟別人說 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.154.236

02/15 12:40, , 1F
真正傳的是line的位址 位址不會變
02/15 12:40, 1F

02/16 14:58, , 2F
傳位址不是與pointer有關嗎@@? 不是很懂QQ
02/16 14:58, 2F

02/16 15:00, , 3F
其實你傳的就是pointer
02/16 15:00, 3F
文章代碼(AID): #1H7Rig0B (C_and_CPP)