2016-09-18 166 views
1

任何人都可以解釋以下程序的工作原理嗎?這裏name[]是一個指向char的指針數組,那麼name如何包含值而不是地址,以及如何將所存儲的值存儲爲字符串而不是字符?如何指向char的指針數組保存字符串而不是地址?

#include <stdio.h> 
const int MAX = 4; 
int main() {  
    char *names[] = {  
     "Zara Ali",  
     "Hina Ali",  
     "Nuha  Ali",  
     "Sara Ali", };   
    int i = 0;  
    for (i = 0; i < MAX; i++) {  
     printf("Value of names[%d] = %s\n", i, names[i]); 
    }   
    return 0; 
} 

回答

0

你可以採取簡單的例子:

char *s = "abcd"; 
printf("s = %p\n", (void *)s); // 1) address 
printf("s = %c\n", *s);   // 2) char 
printf("s = %s\n", s);   // 3) string 

這裏s是字符指針(類似於您names[i],也是一個字符指針)。實際上s可以解釋爲1)一個地址,2)一個正常的字符指針,或者3)一個字符串。

第一個s是一個指針,因此s保存它指向的地址。您可以使用%p控制字符串來檢查第一個printf的地址。

第二,s是一個指向char的指針,所以你可以照常使用它,使用printf %c這將打印第一個字符。

三,s是一個指向char的指針,這是一種聲明C string(另一種方法是使用數組)的方法。 C字符串是以\0作爲分隔符結尾的連續字符數組。使用printf %s時,您將其打印爲字符串。

+0

使用s作爲字符我們寫「printf(」s =%c \ n「,* s);」對於字符串,我們寫「printf(」s =%s \ n「,s);」。爲什麼要打印我們使用的字符* s和僅字符串s? –

+0

你不是新手(即你可以投票),考慮接受答案的投票 – artm

2

甲文字等"Zara Ali"串計算爲它的第一個字符的地址。

字符串文字通常存儲在只讀數據段中。

所以基本上你的數組包含地址

你也可以寫

char *str="Zara Ali"; 
//The value of a string literal is the address of its first character. 
+0

你可以更詳細地解釋一下你實際上的意思是什麼?「字符串的值是它的第一個字符的地址。」 「? –

+0

@sameersoin考慮一個字符串「Ali」。它將被存儲在內存中,並將在只讀段中佔用4個字節的內存(第4個字節用於存儲''\ 0'')。當你寫「Ali」時,它意味着第一個字節的地址。所以'char * ptr =「Ali」;'會將第一個字節的地址賦給'ptr'。 – Raman

相關問題