1樓:匿名使用者
不知道您說的「 *a='a' 出錯了,」是什麼現象?
您的這種程式,據我所知,在不同的系統中,可能會有不同的現象。
您的意圖,似乎是想用 *a='a' ,來將字串中的字元d換成字元a,這種操作,在有些系統中是允許的,但有些系統中卻不可以執行。
原因是:您這裡沒有給字串"d"在變數區中安排空間,而是直接按「字串常量」的形式寫在程式中,只是把它的首地址送給了指標a。
所以,編譯程式有可能將字串"d"的位置安排在了常量區中或者程式**區中。而常量區和程式**區在有些系統中是不允許在程式執行期間修改的。特別是在很多微控制器程式中,常量區和**區都是安排在「只讀儲存器」中,當然就無法改寫了。
不知您的現象是否如此。
2樓:匿名使用者
猶疑昨夜雪花飛 千山萬壑銀裝裹。
3樓:匿名使用者
a是字元指標,裡面放的是一個地址,所以a="d";是錯的。*a=a;是對的。c語是沒有字串這個概念,所以只有打字元一個一個拼起來。而且printf裡是沒有%s的。
你要是想裝字串,那就要定義一個字元陣列,把字元一個一個放裡去。。。
4樓:匿名使用者
一樓說得對。
字串"d"內容儲存在資料區 ,不能修改。
使他儲存在棧上就對了。
這樣改就對了。
#include
int main(void)
或者這樣改。
#include
int main(void)
5樓:加
int max(int x,int y)
void main()
//c/c++函式都是平級的,一個函式的定義不能在另一個函式中。
6樓:匿名使用者
常量字串不能改變。
7樓:匿名使用者
都是錯。。。不要急啊。。。
#include
int main(void)
char *p;
p=s; /把s的首地址給p
for(i=0;i<=32;i++)
return 0;
一個簡單c語言小問題?
8樓:旅初彤
a-=a+b這個等價於a=a-(a+b).所以a=a-a-b,故a=-b
一個c語言問題
9樓:網友
錯誤是 「d 」了。
因為陣列名s,代表字串陣列的首地址,s指向的地址就是s[0]的地址。gets(s)正確則gets(&s[0])也是正確的,所以 a, c 正確。
而scanf("%s",s+1);實際上只是不從s[0]開始,而是從s[1]開始賦值而已,既然只輸給它5個字元,所以從s[1]開始賦值也不會過界,則b是正確的。
因為d中s[1]是個變數不是地址,這是明顯的錯誤,scanf()的第二個引數必須是地址。不是常常都能看到scanf裡面有取地址符(&)的字樣嗎?!就是為了給以個地址。
而為什麼字串s不要取地址符的原因也一樣,因為s本身就是個指標,是指向陣列字串的首地址。故d是錯的。
因而選d.
10樓:匿名使用者
d首先明白sanf()函式的引數格式,第二個引數必須是一個指標,而d項是一個變數。
11樓:匿名使用者
d)scanf("%s",s[1]);
不管是gets,還是scanf語句,引數都是地址值,而上面這個s[1]不是地址。
12樓:
a和c差不多。。。
輸入的5個字元分別儲存在s[0],s[1],s[2],s[3],s[4]中。
b選項也是正確的。。。s表示首地址,s+1表示下一個位置,也就是說輸入的5個字元分別儲存在s[1],s[2],s[3],s[4],s[5]中。
d選項是錯誤的。。。s[1]只表示一個char。。。而%s表示的字串。。
如果寫成scanf("%c",s[1]);是可以的。。。
希望對你有幫助。。。仍有問題可以hi我。。。
c語言簡單問題?
13樓:金色潛鳥
c /c++ 語言結構 ,就是由 一個一個函式組成。例如:
fun1(){fun2(){main(){fun3(){
程式執行 從main() 的頭開始 到 main() 的結束為止,main裡的語句可以呼叫函式並返回,其它函式也可呼叫其它函式。
被調函式在後的,那麼前面要寫 函式原型宣告。
例如,main() 要調 max();max() 定義 在 main() 以後。所以在 main(){以前,寫了:
double max(double x, double y); 帶分號的 「max()函式原型宣告」
這樣,main() 就能呼叫 後面的 max() 了。
max()的函式原型宣告,也可寫在 main() 程式的 開始部分(宣告區),並在呼叫max()以前寫即可。
14樓:匿名使用者
在外面宣告後可以被同一個原始檔的所有函式呼叫。 但如果只在main中宣告,則只能被main呼叫,如果還有個函式f也想呼叫max,則在f中也要宣告。
15樓:白狼聖狂
你沒有準確吃透函式,屬於範圍傷的認識錯誤,在這裡的結構是這樣的:
這是這個**的結構體系。
你以前都以為只有這樣才行:
這是最容易理解的結構體系。
你需要知道的一件事,**定義的max函式和main函式是同級關係,不是包含關係,在c語言裡同級關係可以相互呼叫,現在的直接在main裡定義函式的幾乎沒有了,有些編譯器還不支援,建議你以後用第一種定義方案。
你也可以去搜尋一下關於**塊{}的作用範圍,這裡不多講。
16樓:薩誠友妍
我想是這樣的:那個後面連續的三個(++j)表示先把j加上1再用做計算,這樣的話,j就加了3次,所以是8,j做完自身的加法後就做j+j+j,所以是三個8相加,是24.至於為什麼不同的編譯器結果不同我就不知道了。
簡單的c語言問題?
17樓:共享人間真情
xyz()是建構函式,是用來初始化例項物件的成員變數的,比如這裡的name,它是一個字元指標型別,其實就是代表一個字串。在xyz()中手動給其分配了記憶體資源,需要在物件銷燬的時候釋放記憶體資源,物件銷燬的時候系統會自動呼叫解構函式,也就是~xyz(),這些是程式設計語法的歸定。所以,delete釋放記憶體資源的操作要放在~xyz()裡,如果你放在xyz()裡,剛new開闢的記憶體資源就被你delete釋放了,那相等於沒有開闢記憶體資源。
注:new,delete操作符是c++中的,c語言中沒有,c語言中開闢記憶體空間用的是malloc,釋放用free。
祝你學習愉快!
簡單c語言小問題
18樓:皮蛋工程師
do迴圈程式段可以等效簡化為:doi=i+1;//1)
if(i%2!=0)
x=x+i;//2)
i=i+1;//3)
y=y+i;//4)
i=i+1;//5)
}while(i<=7)
do迴圈過程如下:第一遍do迴圈中:
(1)式i=1
(2)式x=1
(3)式i=2
(4)式y=2
(5)式i=3
第二遍do迴圈中:
(1)式i=4
(2)式不執行。
(3)式不執行。
(4)式y=6
(5)式i=5
第三遍do迴圈中:
(1)式i=6
(2)式不執行。
(3)式不執行。
(4)式y=12
(5)式i=7
第四遍do迴圈中:
(1)式i=8
(2)式不執行。
(3)式不執行。
(4)式y=20
(5)式i=9
退出do迴圈。
結果x=1,y=20.
需要注意:單個語句(i++;i;)均等價於(i=i+1;),
語句(y=y+i++;等價於y和i相加後的值賦值給y,然後i再自增1
謝謝!望採納!
c語言簡單問題
19樓:匿名使用者
答案a:46是這樣得到的:
scanf 是輸入語句,"%2d%2d%3d",&a,&b,表示按照兩位整數的格式依次獲取兩個輸入的資料,並且分別儲存在變數和變數b中,所以 a=12,b=34。(這裡%3d可以忽略,因為沒有對應的儲存變數了)
printf 是輸出語句,「%d",a+b,表示以整數的形式輸出 a+b 的值,當然就是 12+34 = 46了。
20樓:匿名使用者
%2d 兩位數字 %3d 三位數字。
%2d%2d%3d --兩位數字兩位數字三位數字第一個%2d存入變數a地址。
第二個%2d存入變數b地址。
a=12 b=34 a+b=46
21樓:匿名使用者
scanf限制了數字位數2d、就表明a只取兩位、從前往後依次就是12;又是個2d就表明b再往後取兩位是34,一加就是46
22樓:a葰汰
列舉型別中,後面變數值是前面變數的值加1
如basic=3,則assembly=4
同樣 ada=100,則cobol=101,fortran=102
23樓:萍水e相逢
linux系統下。
提示 段錯誤。
如果改scanf("%2d %2d",&a,&b);
結果 46
簡單的C語言問題,一個簡單的C語言問題
列舉型別中,後面變數值是前面變數的值加1 如basic 3,則assembly 4 同樣 ada 100,則cobol 101,fortran 102 如果一個值沒有給定,就是它前一個變數值 1,ada 100,所以cobol 101,fortran 102 不完整。像是定義一個列舉變數並賦值。1。...
簡單的c語言程式輸出一個簡單的c語言程式輸出1IND00不知道哪裡錯
進行浮點數程式設計時,如果沒有注意,常常會出現輸出類似 1.ind,1.inf 或者 nan,inf 之類奇怪的輸出。這通常隱含了浮點數操作的異常。特殊浮點數的含義 1.inf inf 這個值表示 無窮大 infinity 的縮寫 即超出了計算機可以表示的浮點數的最大範圍 或者說超過了 double...
關於c語言的簡單程式,關於c語言的一個簡單程式
首先,並不十分了解這個程式的本意是什麼,但是錯誤是很明顯的,看提示就該知道了。賦值符號 左邊的運算元必須是合法的左值,表示式不是合法的左值 這也是為什麼可以通過像你那樣寫等於操作的時候可以避免把等號寫成賦值符號的原因 如下修改 a i 100 b i 100 a 10 c i 100 a 10 還有...