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 一個陣列,若其元素均為指標型別資料,稱為指標陣列。也就是說,指標陣列中每一個元素都相當於一個指標變數。一維指標陣列的定義形式...