1樓:自我程式設計
我不清楚你的疑問到底指哪些。我就你寫的這些**解讀:
int read_column_numbers(int columns, int max)函式功能:
傳引數組首地址,及陣列最大長度。
使用者輸入max個整數,只儲存其中的正整數(負數忽略),如果正整數的個數是偶數則返回個數。否則程式結束。
void rearrange(char *output,char const *input,int n_columns, int const columns)函式功能:
傳參 陣列output首地址 , 陣列input首地址 ,使用者輸入正整數個數,正整數陣列
迭代陣列,根據使用者的輸入的數字作為input起始下標,複製並拼接到陣列output中(具體邏輯我不研究了)。
strncpy(output + output_col,input + columns[col],nchars)這裡就是就是拼接複製,變數output_col記錄的是output 已儲存字元長度,output + output_col就是每次接在已有字元後面放複製的字元。input + columns[col]是使用者輸入的數字作為起始位置的偏移量取nchars個字元複製到output 中。
總結:一、
首先陣列名作為引數傳遞,無論形參定義是指標還是陣列(int *columns 和 int columns[ ]效果是一樣的),最終都是傳地址。
二、陣列形參定義char const *,修飾符const表示常量不可修改,這裡const修飾的是*input,表示陣列指標指向的地址內容不能修改,但是陣列指標本身值可以修改。也就是說函式中可以改變input指向的地址(比如input++),但是不能改變其指向的值(比如input[0]='a')。
c語言函式呼叫類的問題,急求解釋
2樓:
#include
void myfun1(int x);
void myfun2(int x);
void myfun3(int x);
typedef void (*funtype) (int );// 定義一個函式指標型別funtype,與下面定義函式的型別一致
void callmyfun(funtype fp,int x);//函式從這開始呼叫
int main(int argc, char* argv)
void callmyfun(funtype fp,int x)//進入函式funtype fp
//行傳遞進來的函式,注意fp所指的函式是有一個引數的
void myfun1(int x)// 這是一個有引數的函式,以下兩個函式也相同。//fp的引數,引數在哪
void myfun2(int x)
void myfun3(int x)
3樓:匿名使用者
void callmyfun(funtype fp,int x)//進入函式funtype fp
//行傳遞進來的函式,注意fp所指的函式是有一個引數的解釋:函式callmyfun(funtype fp,int x)有兩個引數
第一個引數:funtype fp; 為函式指標第二個引數:int x; 為一個整形數,用於傳遞給函式指標fp比如:
callmyfun(myfun1,10);//假設呼叫此變數就是呼叫函式myfun1,並且在callmyfun中把10作為引數傳遞給myfun1
4樓:匿名使用者
void callmyfun(funtype fp,int x);是一個包含函式指標的函式!
fp只是函式指標的名稱,是 callmyfun函式的形參,這個名稱你可以隨便取的
當呼叫callmyfun(myfun1,10);//假設呼叫此變數時,
fp指代的就是myfun1函式,而myfun1的引數**來?就是通過callmyfun的第2個引數傳遞進來的,這裡是10
所以執行callmyfun(myfun1,10);函式,其實就是執行了call myfun1(10)
所以執行callmyfun(myfun2,20);函式,其實就是執行了call myfun2(20)
所以fp(x)指代的是一個函式,如果要輸出他的結果,那在定義myfun1,myfun2時,函式就需要有返回值,而不能用void
5樓:gta小雞
callmyfun(funtype fp,int x)這是一個「高階函式」,它的第一個引數fp是一個函式,第二個引數x是第一個引數的引數,fp(x)就是把第一個引數fp當做一個函式呼叫,並且將x作為它的引數傳遞。
c語言函式遞迴呼叫問題(請高手幫忙詳細解釋)
如果只有一個盤,直接把它從one移到three位置 若有n個盤,就假設有n 1個可以知道怎麼移,那麼把上邊n 1個盤從one移到two位置,再把最底第n個盤從one移到three位置,最後把其餘n 1個從two移到three位置。問題就解決了。對於n 1可以依靠n 2解決,以此類推,直到2個盤時可以...
C語言函式及指標問題
代入變數和值的作用域不一樣,也就是,如果通過變數代入,此時不會改變變數的值。如果通過指標 引數 的形式代入,則會可以改變指標指向的變數的值,但是地址不可以改變。如果想改變地址呢,就得用雙指標,或者說第二層地址代入。這個理解起來其實很簡單 只要記住一點,實參和形參不在一個記憶體地址中就可以,改變形參不...
c語言問題,急求解答,C語言問題,急求解答
你好樓主 if a 1 是判斷a是否等於1 而if a 1 則直接將a賦值為1,即永遠非零 為真 不會執行else下內容,不符合程式原意 c語言中 為賦值 為判斷是否相等 a 1 是吧1賦值給a if a 1 等價於 if 1 條件為真了這時候if語句後面的內容必然會執行的 a 1是判斷他們是否相等...