二級C語言源程式查錯,C語言 程式設計後,有錯誤,怎麼檢視是那部分出錯了!

時間 2021-06-08 01:16:00

1樓:黃邦勇帥哥哥

先回答你程式錯在**?程式錯在函式f你設定為void(也就是沒有反回值)而你卻使用了return反回值,函式f(3+5)是沒有錯誤的。編譯器提示你這裡有錯誤的原因是你在這裡呼叫了f函式,所以才提示這裡錯誤。

你只要把void f改為int f程式就沒問題了。

下面回答你的附加問題:

1、這是對的,預處理器都是以#開始的,因為預處理器是編譯器把c++**編譯為機器指令之前執行的乙個過程,因此應把這些命令放在開頭,以便最先執行。

2、誰告訴你在一行上不能有多條預處理器命令的呀,一般情況下這個可能與編譯器有關的,我在vs2005中,只有#include "stdafx.h"這一句必須是第一行,而且要單獨佔一行,其他#include語句可以完全寫在同一行上。#include也是預處理器。

因為預處理器是以#開始的。

3、這是你對列舉(union)沒有理解的原因,列舉是只佔乙個記憶體位址的型別,也就是說不管你在union中定義了多少個成員,這些成員是共享的同一塊記憶體位址的,而這個共同記憶體位址的長度的確定就是以列舉中佔據位元組數最長那個資料型別為準,因此在你的示例中double佔據的位元組數最長,因此列舉所佔位元組數與c所佔位元組數相同。

4、char *sp; *sp="rigth!"; 因為*sp是乙個常量,不能對常量進行賦值,正確的方式是sp="right!"; 因為sp是乙個指標,指標需要指向乙個位址,因此可以把字串常量right的位址賦給指標。

char s[10]; s="right!"; 因為陣列名s表示的是乙個常量位址,也就是說陣列名所表示的位址是乙個常量,而你再把字串常量的位址賦給這個常量,那就相當於3=4這樣的賦值,因此這是錯誤的。陣列名的位址不能被更改,這與指標不同,指標是乙個變數,可以把指標指向不同的位址,因此指標所指向的位址可以更改。

char s[10]; *s="right!"; 錯誤在原因在於*s表示的是*(s+0)也就是s[0],因此這條語句就是在對陣列中的第乙個無素s[0]賦值,而你對他賦了乙個字串,因此是錯誤的,你應該只能對*s賦單獨的乙個字元,比如*s='a';這樣才正確。

下面是給你的一點附加知識:

指標運算子的作用,我用一言以概之,你在**使用都不會錯。指標運算子*的作用是求出*後面所指位址裡的值。因此只要*後面的變數表示的是乙個位址就可以使用*運算子,來求出這個位址中的值,你不用管這個位址的表示形式是怎樣的,只要是位址就可以使用*來求出位址中的值。

第二:[ ]這個運算子的的運算法則是,把左側的位址加上[ ]內的偏移量然後再求指標運算,注意有[ ]運算子的地方就有個隱含的指標,比如x[2]表示的就是將指標x偏移2個單位量後再求指標運算。也就說x[2]與*(x+2)是相等的。

預處理器:預處理器是編譯器把c++**編譯為機器指令之前執行的乙個過程,所有的預處理器都是#開頭,以便與c++語句區分開來,#include預處理器指令在前面已經用過不少了

3.1、#define指令:該指令用於符號置換,其格式為#define 識別符號 字串行。

注意該語句不以分號結束。比如#define pi 3.1416就表示把pi置換為3.

1416,這裡要注意的是雖然pi看起來和變數一樣,但pi和變數沒有任何關係,pi只是乙個符號或標誌,在程式**編譯前該符號會用一組指定的字元來代替。還要注意的是3.1416並不是乙個數值,而是乙個字串,因此不會進行型別檢查。

在c++中最好是用const來聲名常量,比如const long double pi=3.1416;這樣的話pi將會始終保持為long double型別。語句中的字串行可以是任意的字串行,而不僅僅是數字,比如#define pi hyong這樣的話在使用pi使就會用hyong來替換掉pi,當然hyong這裡會是乙個未定義的識別符號

2樓:匿名使用者

void f(int x)

返回值為空,而寫成了,return p*x*x出錯,printf 肯定就出錯了,所以會報2錯,應該寫成 int f(int x)

132811 說的 void *f(int x)/有問題如果你想讓返回值為空,可以傳乙個引數進去存放結果int nresult = 1;

void f(int x, int nresult)printf("%d\r\n",nresult);

3樓:匿名使用者

void f(int x)

錯誤。return 了int,但是你的函式返回值型別卻是 void。

4樓:

返回值不對。void f(int x)無返回值,而你的程式裡卻有return(p*x*x);

更改int f(int x)

5樓:匿名使用者

函式f定義的是void 無返回值的,還return(p*x*x)

6樓:匿名使用者

return(p*x*x)是什麼?用void不是不返回值嗎

c語言 程式設計後,有錯誤,怎麼檢視是那部分出錯了!

7樓:

不知道你用的什麼編譯器

,大部分編譯器都會告訴你是在哪個檔案的哪一行出錯和出的什麼錯一般在錯誤上雙擊就能跳轉到那一行上去

1.if後面不能有分號,雖然編譯能過,但是錯誤的邏輯2.你的問題是花括號不匹配,按ctrl+a全選,然後再按alt+f8進行格式化,就能看到是**多了或者少了

3.你在下面error那一行雙擊,就能看到哪一行不對

8樓:我不知道

在錯誤 x個,警告 x個上面就對應有x個錯誤的位置和型別,有些編譯器雙擊它還會轉到相應的位置。警告類似。

9樓:匿名使用者

vc6.0最下面的輸出視窗就可以看出錯誤阿,只是因為是英文的不太好懂。如

c:\documents and settings\administrator\桌面\c+練習\lx6\x.cpp(6) :

error c2146: syntax error : missing ';' 就是說名為x.

cpp的原始檔的第六行出錯了,什麼錯誤呢?缺失了乙個「;」。

記得要滑動滾動條去檢視,不懂的還是要多問問老師。我也是正在學習中的。

10樓:匿名使用者

出錯會有提示啊。找到出錯點,看看程式是變數沒賦值還是少了分號,等等錯誤啊,編譯器會報錯的,也會指出錯誤啊。

11樓:匿名使用者

暈這個問題太寬泛了不同的問題都有不同的解決方式

如果環境不同也會不一樣 樓主最好把自己的側重點說出來

12樓:匿名使用者

有提示,vc的話,只要點下面的提示,會有顯示是哪一行

13樓:flashyy雙魚

少了main函式頭都不知道?

c語言二級指標問題,C語言二級指標問題

1 通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。2 參考 如下,可以看具體註釋輔助理解。include 輸入輸出標頭檔案。include 本程式需要用到malloc free函...

C語言二級問題

你程式下面的第一句話很不嚴謹啊 呵呵 不加的話就變成了b 2.0.這是啥意思啊?開玩笑啦 double相當於double float的縮寫,意思是兩倍的float型別空間 可以儲存多倍於float的資料 不一定是兩倍,編譯器不同結果不同 當然,數字小的話沒什麼區別 下面是c 上的參考資料 float...

二級c語言的選擇題又麻煩大家了,二級C語言的選擇題 又麻煩大家了

犍為真人 20 每個case後都沒有出現break,所以它們會一直執行到最後,即執行到default,在default中出現v0 1,v2 1,所以輸入多少個字元,v0,v1就會增加多少。v1 1出現在case u 但是它之前的case中,都沒有break語句,所以,只要是a,a,e,e,i,i,o...