《C語言解惑》 2 11 指標的困惑

2021-09-23 15:13:10 字數 1153 閱讀 2245

【例2.17】分析下面程式的執行結果。

#include void main ( )

這個程式執行後給出乙個奇怪的輸出「50,1250」。「a*p」的表示式是對的,即「225=50」。但「bx/p」應是「50*25/25=50」,為何變成1250了呢?原來程式多了乙個「;」號,使計算c的表示式變為

c=b*x;

也就是原來「/」被作為注釋語句的開始,一直遇到「/」才結束注釋。如果沒有多出的符號「;」,編譯系統會給出如下錯誤資訊。

error c2146: syntax error : missing ';' before identifier 'printf'

這個資訊也夠人琢磨的,其實是「/」遇到「*」,有理說不清。

在碰到含有指標的表示式時,在前後留乙個空格就可以有效地避免這類問題。例如,把這兩條語句改為

b=a p;

c=bx / p;

或者用括號明確表示式的含義,即

b=a(p);

c=bx/(p);

這樣既容易理解,又能正確編譯。

【例2.18】下面的程式實現將輸入字串給t的內容複製到s中,這個程式能正確實現將輸入「you and we」複製到s中嗎?

#include #include void strcpy1 ( char *, char *);

void main ( )

void strcpy1 ( char *s, char *t)

【解答】不能。理由如2.7節所述。解決的辦法之一是使用gets函式。如果需要保留t,可以像下面這樣實現。

#include #include void strcpy1 ( char *, char *);

void main ( )

void strcpy1 ( char *s, char *t)

如果不需要保留t,可以直接實現複製操作,實現的程式如下。

#include #include void strcpy1 ( char *, char *);

void main ( )

void strcpy1 ( char *s, char *t)

c語言010 指標

include int main 注意 p前面的型別決定了取位址的能力。如果是int型別的,就說明在32平台下可以取址能力是4個位元組。2 指標的本質就是儲存乙個位址,在32位的系統上,所有程式的記憶體位址都用4個位元組表示,所以不管是什麼型別的指標。指標大小都佔4個位元組。稱之為間接引用,表示根據...

2018 5 1指標c語言

是人類的,人類 肯定是給我隨便用,不然 抽他。include include pragma pack push,1 struct s1 a char ch pragma pack pop static void alloc void static void fill void p static vo...

C語言(九) 指標(3)指標與const

表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...