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

時間 2022-03-31 11:45:19

1樓:匿名使用者

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

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

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

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

2樓:匿名使用者

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

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

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

3樓:匿名使用者

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

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

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

4樓:莊政警

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

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

int *add(int a, int b)

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

5樓:自我程式設計

char *connect(char *dst,char *src)

6樓:匿名使用者

*p=*q;

*p='\0';

還有,你拼寫有錯誤

7樓:匿名使用者

*p=*q;

*p=0;

c語言中指標作為函式引數的問題。

8樓:匿名使用者

更正以下樓主的問題補充,swap函式的兩個引數,定義的時候,定義p1和p2,他們都int*型別的,也就是兩個整型指標的型別。主函式傳遞進來的是a和b的地址,swap函式是將兩個地址的值,也就是*p1和*p2交換,達到的效果是將兩個地址上的值交換

9樓:濤褪荒蕪

o(∩_∩)o哈哈~。在函式宣告和定義時fun(int p1,int p2)是不是表示它的引數是兩個int型的整數。fun(int* p1,int* p2)則使表示它的引數是兩個指標型別的。

定義和宣告時的變數只是代替符,其它的運算子號與型別符號加起來才是引數型別。你如果覺得不好理解,那麼在寫的時候就把int 和*放在一起(int*),這就是引數型別。

10樓:只會做土豆配西紅柿

恩,int *p1 代表的不就是int a嗎!!!!!不是一樣的,程式沒有錯啊

11樓:

沒有任何錯誤啊!

p1,p2本來就是int*型別的,swap引數也是int*型別的, if(a>b) swap(p1,p2);這一句沒錯啊!swap本來就需要指標變數,p1,p2正好又是指標變數,直接寫上去就可以了!

swap() 中是 int *p1 和int *p2這是因為這是swap的定義,既然是定義就要宣告引數的型別,這裡宣告的是int*型別,那使用的時候就要傳遞int*型別的。主函式裡的型別也是int*,對應上了,就可以了。

在定義變數的時候,建議你把*和資料型別當做一個整體,看成一種新的資料型別,不要把*和變數看做一個整體。比如int* p,int*是一個資料型別,p是變數名。

c語言指標呼叫函式問題

12樓:

編寫一個程式,採用結構陣列記錄許多學生的資訊。這個程式允許使用者輸入資訊來填充該陣列,並列印出陣列內容。

編寫一個程式,採用一個結構體存放學生資訊。應當使用子程式/函式來填寫學生結構變數和列印學生結構變數的內容。

沒有說一定要用指標啊……

13樓:匿名使用者

函式呼叫函式

void b(引數1,引數2)

int a(引數1,引數2,(void *)b(引數1,引數2) )

a函式呼叫b函式

c語言這個f函式再指標

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

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

15樓:

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

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

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

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

C語言指標問題,C語言指標問題?

文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總...

C語言指標問題,C語言指標問題。

最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...