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。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...