2016-03-29 65 views
-4

我正在學C語言的指針。我寫了一個簡單的指針代碼使用。我沒有任何錯誤,但程序在執行過程中凍結了iz。這可能是什麼原因?指針有什麼問題

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <string.h> 

void main() 
{ 
    int i; 
    int *i2; 
    i2 = &i; 

    int z; 
    int *z2; 
    z2 = &z; 

    int b = 0; 
    int *b2; 
    b2 = &b; 

    char ch[250]; 
    //char *ch2; 
    //ch2 = &ch; 

    printf("%s\n", " Enter line not longer than 250 characters"); 
    gets_s(ch); 

    for (*i2 = 0; *i2<10; i2++) 
    { 
     if (*i2>4) 
     { 
      *z2 = *i2; 
      *b2++; 
      break; 
     } 
    } 
    printf("%d%c", *b2, ch[*z2]); 
} 
+4

不修改自己的問題以致無效答案! –

回答

4
for (*i2 = 0; *i2<10; i2++) 

應該

for (*i2 = 0; *i2<10; (*i2)++) 

注: 使用main()

int main(void) //if no command line arguments. 
5

一個大P中的標清roblem是您for循環:

for (*i2 = 0; *i2<10; i2++) 

i2++遞增指針的值(使它指向比i其他的東西),沒有的事是指出。你需要該行更改爲

for (*i2 = 0; *i2<10; (*i2)++) 

各地*i2括號是必要的,因爲後綴++操作符比一元*運營商更高的優先級。 *i2++將被解析爲*(i2++),這不是你想要的。

2

當你編輯你原來的問題時,你問了第二個問題(編輯現在已經被逆轉,所以實際問題已經消失)。

基本上你問爲什麼printf語句沒有返回期望值。 當時你有這樣的代碼:

for (*i2 = 0; *i2<10; (*i2)++) 
{ 
    if (*i2>4) 
    { 
     *z2 = *i2; 
     *b2++; 
      break; 
    } 
} 
printf("%d%c\n", b2, ch[z]); 

B2是一個指針...... INT * B2;
現在您爲b2賦值b2 =&b;
所以現在B2包含地址B和你的printf語句打印這個地址(雖然整數格式「%d」,而不是作爲一個指針%P)

要在「B」,這是得到保存的值「指出'b2',您需要解除引用... * b2

但是...請注意,您已經使用此語句更改了指針* b2 ... * b2 ++
該語句更改了指針的值,而不是它最初指出的b的值,現在* b2將是未定義的。

變化* B2 ++到(* B2)++和變化的printf B2給printf * B2
,結果爲b + 1,這將是1爲B最初設置爲0

+0

太棒了!非常感謝。在幾個地方問了這個問題,但沒有得到任何解決方案 – Alex