[問題] 雙重指標

看板C_and_CPP (C/C++)作者 (硬漢)時間16年前 (2009/02/18 21:08), 編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/7 (看更多)
#include <stdio.h> #include <string.h> void input(FILE **pfp1, FILE **pfp2) { char string[20]; printf("請輸入文章檔名:"); gets(string); *pfp1 = fopen(string,"r"); printf("輸入測試的字串:"); gets(string); *pfp2 = fopen(string,"r"); } void output(int count) { printf("出現了%d次\n",count); } int process(FILE *fp1, FILE *fp2) { int count=0; char st[20], word[20]; fscanf(fp2,"%s",word); printf("Searching word=%s\n",word); while(fscanf(fp1,"%[^., ]",st)!=EOF) { if(strcmp(st,word)==0) { count++; } fscanf(fp1,"%[., ]",st); } return count; } void main(void) { FILE *fp1, *fp2; int count; input(&fp1, &fp2); count=process(fp1, fp2); output(count); } -------------------------------------------------------------------- 這個程式目的是在一篇文章中搜尋關鍵字,我想問的是為什麼在input裡要用 **pfp1這種雙重指標? 在process裡開檔就好了不是嗎? 這樣做有什麼用意嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.208.139

02/18 21:11, , 1F
這樣做的話, fun沒用全域變數
02/18 21:11, 1F

02/18 21:12, , 2F
code比較容易看吧
02/18 21:12, 2F

02/18 21:13, , 3F
全域變數用多了, 有時可能會不小心改到蛋是沒注意到
02/18 21:13, 3F

02/18 21:13, , 4F
會不好debug
02/18 21:13, 4F

02/18 21:41, , 5F
那改成input(fp1,fp2) 裡面用*pfp1會怎樣?
02/18 21:41, 5F

02/18 21:44, , 6F
會得不到值
02/18 21:44, 6F

02/18 21:46, , 7F
簡單說, input變數除了要輸入, 也要輸出到變數
02/18 21:46, 7F

02/18 21:47, , 8F
所以要用** , 而process變數只要輸入, 所以用*
02/18 21:47, 8F

02/18 21:48, , 9F
你好好想一下何謂call by reference, 把過程推演一下
02/18 21:48, 9F

02/18 21:48, , 10F
就會知道
02/18 21:48, 10F

02/18 23:31, , 11F
C++ call by ref不是長這樣
02/18 23:31, 11F

02/19 00:34, , 12F
了解, 我搞錯了, 我一直把傳指標的方式當成by r
02/19 00:34, 12F
文章代碼(AID): #19d0WuUS (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
2
15
完整討論串 (本文為第 1 之 7 篇):
2
15
1
20
2
9
3
20
文章代碼(AID): #19d0WuUS (C_and_CPP)