C語言指標呼叫函式問題,急求解釋(本題是《c和指標》上的題目

2021-04-02 12:48:09 字數 2274 閱讀 5485

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是判斷他們是否相等...