本文目錄一覽:
一個很簡單但很奇怪的C語言問題
你的函數的形參傳的是值,在進入函數時為struct st t分配空間,在函數結束後該空間被釋放了,所以是亂碼
試試用引用
char *f(struct st t);//聲明
char* f(struct st t){}//定義
一條奇怪的c語言題,在visual C++上編譯不了
typedef struct type // 前面漏了typedef
{
long x[2];
short y[4];
char z[8];
}MYTYPE;
//MYTYPE them;
int main()
{
struct type them;
printf(“%d\n”,sizeof(them));
return 0;
}
這道題主要看你在多少位的機器上運行,我在32位的機器上運行是24
2個long,8個位元組
4個short,8個位元組
8個char,8個位元組
共24個位元組,這裡沒涉及位元組對齊的問題
奇怪的 C 語言
首先指出,你的C語言寫法很不符合C語言規範。請注意正確書寫。函數定義再調用之後,請在函數調用之前先進行聲明。你沒有。第二,每個函數需要有返回值。你的函數都沒用返回值,如果不需要返回值,請將返回值寫成void,你沒用。
回答
問題一:
在main()函數中三次調用increment();每次調用的時候在increment() 內部都重新分配x的空間,都重新對x複製0,然後在x+=1;執行完一個increment(); 後釋放空間。此時的x就沒了。再次調用,再次分配空間,再次賦值。
問題二:把你的程序修改成C語言規範的。的輸出結果是:10,20,40,40
程序為:
#includestdio.h
int x1=30,x2=40;
void sub(int x,int y);
void main()
{
int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf(“%d,%d,%d,%d\n”,x3,x4,x1,x2);
}
void sub(int x,int y)
{
x1=x;
x=y;
y=x1;
}
一條C語言的題目。怪怪的
你看的應該是例題,這個題目就是考察你對於同名變數的鑒別。
1 x,y,z,w不是全局變數嗎?怎麼又重新定義了static?
他就是這麼定義,然後你使用的時候根據作用域不同,實際使用的是static x 和其他 的函數內定義的變數,也就是全局的被覆蓋了。
2 x和p函數裡面的*y什麼關係?感覺好混亂,求解釋
p函數的x y是實參,定義的void p(int *y, int x)是形參。
賦值的時候,嚴格按照第一個給第一個,第二個給第二個的方法傳遞,不要被名字混淆。
嚴格來說,這樣的代碼很不規範,但是不影響編譯。
只是很難維護和理解。
純手打,採納哦
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287061.html