2012-11-07 64 views
2

尋找與處理字符串數組相關的特定主題的一些說明。似乎有幾個相關的問題,但我無法找到一個討論我的問題。如果之前已經詢問過,請將我指向相關主題。訪問指向字符串的指針數組

在下面的代碼片段(檢查printf語句)中,我使用相同的變量來訪問內存位置的值和內存位置的地址。我不太確定這是我應該如何寫這段代碼。有沒有更好的方式可以清楚地表明我是否在訪問地址或價值?

char *board[NUM_MAX_ROWS] = {"0101001", 
          "1101011"}; 

int main() 
{ 
    int i, num_rows=0, num_cols=0; 

    num_cols = strlen(board[0]); 
    num_rows = ARR_SIZE(board); 

    for (i=0; i<num_rows; i++) 
     printf("%s stored at %p\n", board[i], board[i]); 

} 

我第一次嘗試這個樣子

while(*board != '\0') 
{ 
    printf("%s stored ar %p\n", *board, board); 
    board++; 
} 

顯然,這並不工作:)不過我還是不太清楚如何,這是由編譯器解釋。

謝謝。

+0

你的第一段代碼是正確的。你傳遞一個指針('char *')兩次 - 參數的解釋依賴於格式說明符。 '%s'將從地址開始打印字符,並以NUL字符停止。 '%p'只會打印地址。 – jrok

+0

你能解釋爲什麼第二個明顯不起作用? – texasbruce

+0

第二個函數無法編譯時出現錯誤:左值需要作爲增量操作數(參考board ++)。我認爲這會增加一個指針。 – dinesh

回答

1

您可以通過解除指針一次以獲取字符串本身的地址來獲得第一次工作。

printf("%s stored ar %p\n", *board, *board);

順便說一句,當你寫使用數組語法,它實際上是等同於

printf("%s stored ar %p\n", *(board+i), *(board+i));

編輯:我似乎已經錯過讀..固定的問題。

0

你可以這樣來做:

#include <stdio.h> 

char *board[] = {"0101001", 
       "1101011", 
       0}; /* note this final 0 as a terminator for stopping the loop */ 

int main() 
{ 
    int i, num_rows=0, num_cols=0; 
    char **c; 

    c = &board[0]; 
    while(*c) 
    { 
     printf("%s stored ar %p\n", *c, *c); 
     c++; 
    } 

    return 0; 
} 

但是,你必須有一個循環擋,如果你這樣做。另外,爲了清楚起見,有人主張使用NULL而不是0