指向char数组的指针

时间:2011-07-01 05:32:04

标签: c

int main( ){    
    char a[2];
    char *p;
    p=&a[0];
    *(p+5)='g';
}

在上面的程序中,我定义了一个指向char数组的指针,但该数组只有3个字节。让我更清楚地告诉你,例如让我们假设char数组地址是1000,所以它需要1003个字节,但是使用指针我在1005位置存储ASCII值'g'。编译器可以吗?那个记忆是一个静态的被激活的记忆吗?或者可以再次使用?该值是永久存储在其中还是不存在?

4 个答案:

答案 0 :(得分:4)

您正在更改程序中的随机内存位置。这是undefined behavior,它可能会对您的程序产生随机影响,例如分段错误。

答案 1 :(得分:3)

  

char数组地址是1000所以它需要   高达1003字节

通常,char的长度为1个字节。因此,具有2 char s的char数组将占用两个字节:1000和1001.

  

编译器可以吗?

编译器没问题。 C允许你做任何你想做的事情,包括崩溃系统。

  

该记忆是否是一个静态的   ?或者可以再次使用?该值是永久存储在其中还是不存在?

该内存未分配给您的程序使用。您承诺您将仅使用位置1000和1001.如果您访问超出该位置的任何内容,那就是undefined behaviour。在这种情况下,任何事情都可能发生,并且没有任何保证。

答案 2 :(得分:2)

编译器没问题,但可能会在运行时出现问题,因为谁知道你写的地址是什么。

答案 3 :(得分:1)

首先,您已声明char数组仅保留2个字符而不是3.如果您尝试此操作,则行为将是未定义的。