2015-04-02 44 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