2015-04-02 45 views
-1

我正在爲測試字符串文字和整數數組編寫此代碼。我需要有人幫助我檢查並減輕我的負擔。可以指向一個整數數組用於修改數組嗎?

1)。

char NUM[] = "ABC"; 
char *p_NUM=NUM; 

NUM[0]='D'; 

puts(p_NUM); 

return 0; 

如果您從字符串文字創建數組,那麼您可以對其進行修改。

2)。

char *p_NUM="ABC"; 

p_NUM[0]='D'; 

puts(p_NUM); 

return 0; 

指向字符串文字的變量不能用於更改字符串的內容。所以這一個會返回一個錯誤。 3)。

int NUM[] = {1, 2, 3}; 
int *p_NUM = NUM; 

p_NUM[0]=4; 

puts(p_NUM); 
printf("%i\n",p_NUM); 

int i; 
for(i=0;i<4;i++)printf("%i",p_NUM[i]); 


return 0; 

puts(p_NUM);printf("%i\n",p_NUM);結果是相當有趣的。我不知道爲什麼。 4)。

int *p_NUM = { 1, 2, 3 }; 

p_NUM[0] = 4; 

int i; 
for (i = 0; i < 4; i++) 
    printf("%i", p_NUM[i]); 

return 0; 

這一個編譯器返回一個錯誤,這意味着指向一個整數數組不能用於修改數組,正確嗎? 5)。

int NUM[] = { 1, 2, 3 }; int * p_NUM = NULL; // integer pointer 

p_NUM = NUM; // integer pointer pointing to integer array 

如果我這樣寫,它是一樣的嗎?

int NUM[] = { 1, 2, 3 }; 
int * p_NUM = NUM; // integer pointer pointing to integer array 
+0

你覺得呢'INT * p_NUM = {1,2,3};'是幹什麼的? – 2015-04-02 08:57:59

+0

我不知道。 – 2015-04-02 09:49:11

回答

2
  1. char NUM[] = "ABC";

NUMchar秒的陣列,其中的"ABC"值初始化。它在讀寫內存中。它的大小爲4,包括空終止符。


  • char *p_NUM="ABC";
  • p是指針字符串文字"ABC""ABC"被置於只讀存儲器中,因此無法修改。


  • int NUM[] = {1, 2, 3};
  • 相同點1整數數組。但是,通過說for(i=0;i<4;i++),您正在運行分配的內存,創建off-by-one錯誤,然後調用undefined behaviour

    您需要將環路條件更改爲for(i=0;i<3;i++),因爲C中的數組索引從0開始。


  • int *p_NUM = { 1, 2, 3 };
  • Invaild。錯誤情況。 p_NUM不是 a 指向整數數組的指針。你的編譯器應該已經產生了很好的警告。在這種情況下,首先,大括號括起來的列表將被視爲初始值爲p。它會產生雙重警告

    4.1。 warning: initialization makes pointer from integer without a cast
    4.2。 excess elements in scalar initializer

    你想要什麼,而不是爲

    int NUM[] = { 1, 2, 3 }; 
    int * p_NUM = NULL;    // integer pointer 
    
    p_NUM = NUM;      // integer pointer pointing to integer array 
    
    p_NUM[0] = 4;     //access array element thr' pointer and index 
    
    int i; 
    for (i = 0; i < 3; i++)   //notice the change here 
        printf("%i", p_NUM[i]); 
    
    return 0; 
    
    +0

    這與我的觀點3是一樣的,但是你將p_NUM初始化爲NULL,然後再初始化爲NUM,是否有區別? – 2015-04-02 09:17:27

    +0

    @LeeWilliam與第3點相同?你讀完我的完整答案了嗎? – 2015-04-02 09:18:32

    +0

    「你想要的是...」,這與我的第3點中的代碼相同。但是,您將p_NUM初始化爲NULL,然後再初始化爲NUM,是否有區別? – 2015-04-02 09:21:25