C語言指標函式中的問題,請教各位

時間 2022-05-29 09:10:11

1樓:愛五中的人

函式 int *max(int *q) ,是一個返回值指標函式,有一個形參,形參是一個整型

指標。在主函式中有語句p=max(a); 這樣就把陣列的首地址作為實參傳給了形參q

至於 ptr=q ;其作用是記錄下陣列裡面較大數字的地址,在比較還沒有開始的時

候就暫且把陣列的第一個數看做最大,也就記下首地址,所以要有ptr=q;

至於 if(*q>*ptr) ptr=q;作用就是取數字和上次比較得到的最大數字再進行比

較,把比較的大得到數字的地址放在ptr裡面。

c 的指標並不是那麼的難,首先不要把它想想多高深。其實就是那麼回事。多想

想,慢慢的就會想通了。

2樓:匿名使用者

你說的開頭那句我不理解if那個條件是比較指標指向的整數值大小

ptr=q是說把q指標地址賦值給ptr 就是ptr和q現在是指向一個地方就是原來的q

還不明白可以hi我

3樓:匿名使用者

q存的是a陣列的首地址,ptr=q,就將q的值傳給了ptr,這樣,ptr也是a的首地址,指向a[0]

if(*q>*ptr) ptr=q;

*q:取q指向的值

*ptr:取ptr指向的值

這句的意思是:如果q指向的值大於ptr指向的值,則將q的值賦給ptr,這樣ptr就指向較小的值了,當迴圈結束後,ptr就指向最小的值了

4樓:

ptr也是指標變數,當q所指向的值大於ptr所指向變數的值時,就把q的值賦給ptr,if(*q>*ptr)是比較兩指標變數所指向變數值的大小。。

c語言指標在函式呼叫中的問題

5樓:匿名使用者

main中的p沒初始化,bai

始終為dunull,函式f中的p和main中的p沒關係的zhi,呼叫daof函式後,建立了一回

個整數,但是答地址賦值給了f中的p,函式退出後p被銷燬了(退棧)。但是分配的一個int型別的記憶體還在,main中的p沒得到該地址,還是null。

printf輸出的是地址0中的內容,但是那個地址中的內容可能是程式**也可能是其他資料,不確定的,因此可能在輸出*p時出錯,也可能分配的記憶體沒釋放造成程式意外終止(記憶體洩漏)。

正確的寫法是f函式的形參p使用引用。

void f(int * &p)

或者返回指標

int * f()

//main中呼叫時改成

p=f();

//無論哪種,最後p要釋放

delete p;

6樓:匿名使用者

這說明你對指標和函式引數傳遞的理解不到位

這個程式裡你想用函式f改變p,那麼就要給

內f傳遞p的地址,p的型別容是int*,那麼它的的地址型別是int**,傳遞&p給f:

int main()

void f(int **p)   //int**或者用c++的引用:

int main()

void f(int *&p)   //int*&

7樓:匿名使用者

int* p指標復

會產生臨

制時變數

bai看看這du

篇文章會zhi明dao白

關於c語言中指標函式的問題 20

8樓:己陽朔

不行, 原因是found函式已經宣告成返回一個int指標的函式了,如果不宣告p為指標則在p=founc(a,n)時會因為型別不匹配而報錯。兩種方法可以解決:1,直接省略掉變數p,在printf語句中直接用printf("%d", *found(a,n));來輸出結果;2,修改found函式為:

int found(int b[10], int n)

則p可以直接宣告為int, 且賦值時用p=found(a,n); 輸出時用printf("%d", p);可以看到這樣改動的比較多。

關於c語言指標函式的使用問題

9樓:莊政警

你的**裡犯了c語言裡的一個很常見的錯誤:函式返回了一個區域性變數地址int *add(int a, int b)int* p = add(a, b); //p指向的記憶體隨時可能被改寫,你看到的正好就是輸出完以後它就變了,(因為add函式從執行完到輸出間隔的時間"很短",3還存在,而從程式暫停到你觀察這段時間"很長",記憶體已經被修改了,你可以再輸出一次*p看看)

你把c定義成靜態的,再看看

int *add(int a, int b)

c語言指標函式的問題。

10樓:匿名使用者

你這個問題,就是典型的不瞭解編譯過程的人容易犯的錯誤,關於指標和記憶體分配的問題,樓上已經講了很多了,這裡補充一點:你這段**裡:str=「hello world!

"; 這樣的定義,hello world 字串是屬於const char,編譯的時候,會編譯在const資料區,這一段的資料是受系統保護的,是不允許更改的!你的程式對const 資料進行操作,程式會崩潰的!

根據你使用的作業系統的不同,編譯器的不同,有些系統下編譯,可能你這個程式能用,比如某個無資料保護的微控制器,但是對於大多數作業系統來說,這個程式肯定是有問題的。

所以同學,要養成好的程式設計習慣,千萬別寫這樣的**,會害死你的。

11樓:匿名使用者

你對於 str 的理解有問題,str 僅僅是一個指標而已,它指向的是一個常量字串,也就是說"hiello world!" 僅僅是一個地址,是在常量區儲存該字串的地址而已。因此後面你想對該字串的內容進行操作,就出問題了。

所以它不是因為在陣列 str 中產生了溢位,而是後面的常量不允許你修改。

為了驗證"hello world!" 僅是一個地址,樓主可以以%c 的格式輸出 "hello world!"[3] 或輸出"hello world!"[6]試試就知道了。

12樓:匿名使用者

編譯器為你的str分配了11個位元組型記憶體單元,你插入後就溢位了,可以改為:

char str[100]="hello world!";

c語言這個f函式再指標

13樓:兄弟連教育北京總校

c語言中, 函式

名也稱為函式的指標,所以c語言中函式名就是一

個指標。

1,例如:

showmenu是一個函式名,可以看到他的值是一個地址。

&showmenu是對函式取地址,指向和showmenu同樣的地址。

可以看出,showmenu是佔用一個位元組的,而作為指標&showmenu卻佔用四個位元組。

所以,函式名佔用空間的。

2,‍函式指標

指向函式的指標包含了函式的地址,可以通過它來呼叫函式。宣告格式如下:

型別說明符 (*函式名)(引數)

其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向一個返回整型值的函式。指標的宣告筆削和它指向函式的宣告保持一致。

指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了一個返回整型指標的函式的原型宣告。

例如:void (*fptr)();

把函式的地址賦值給函式指標,可以採用下面兩種形式:

取地址運算子&不是必需的,因為單單一個函式識別符號就標號表示了它的地址,如果是函式呼叫,還必須包含一個圓括號括起來的參數列。可以採用如下兩種方式來通過指標呼叫函式:

x=(*fptr)(); x=fptr();

第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉一個例子:

void (*funcp)(); void filefunc(),editfunc();

main() void filefunc()

void editfunc()

程式輸出為:

filefunc editfunc

14樓:

28) f的呼叫並不會改變abc的值,所以還是原值4,3,5 選d

29)q為null,不能取內容,所以*q=0是錯誤的,選a

c語言指標在函式中的傳遞問題

15樓:匿名使用者

*x++;

是指標加1,不是值加1~~~

C語言指標函式的問題,關於C語言指標函式的使用問題

你這個問題,就是典型的不瞭解編譯過程的人容易犯的錯誤,關於指標和記憶體分配的問題,樓上已經講了很多了,這裡補充一點 你這段 裡 str hello world 這樣的定義,hello world 字串是屬於const char,編譯的時候,會編譯在const資料區,這一段的資料是受系統保護的,是不允...

c語言函式指標定義,C語言函式指標定義

韌勁 函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也佔用儲存空間,都有相應的地址。可以使用指標變數指向陣列的首地址,也可以使用指標變數指向函式 的首地址,指向函式 首地址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由...

C語言函式問題不能用指標

include int filter int a,int n,int b int main int i,n,k,a 100 b 100 scanf d n for i 0 i 一個陣列,若其元素均為指標型別資料,稱為指標陣列。也就是說,指標陣列中每一個元素都相當於一個指標變數。一維指標陣列的定義形式...