int main( ){
char a[2];
char *p;
p=&a[0];
*(p+5)='g';
}
在上面的程序中,我定义了一个指向char数组的指针,但该数组只有3个字节。让我更清楚地告诉你,例如让我们假设char数组地址是1000,所以它需要1003个字节,但是使用指针我在1005位置存储ASCII值'g'。编译器可以吗?那个记忆是一个静态的被激活的记忆吗?或者可以再次使用?该值是永久存储在其中还是不存在?
答案 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.如果您尝试此操作,则行为将是未定义的。