gpt4 book ai didi

c++ - 指针行为异常

转载 作者:太空狗 更新时间:2023-10-29 20:12:24 26 4
gpt4 key购买 nike

我是一名编程和 C++ 新手。如果能提供一些帮助,我将不胜感激。

下面的程序(c++)在编译和运行时都没有遇到任何问题:

int main()
{
int b = 5;
int*a = &b;
*(a+5) = 6;
return 0;

}

但根据我了解到的一切,它应该不起作用,因为 a 是指向单个变量的指针。我在这里缺少什么?

最佳答案

您的程序在编译时确实应该不会遇到任何问题。这些都是关于编译的有效代码。

但是它会在运行时遇到未定义的行为,因为 a+5 不是有效地址。

如果你想知道它为什么要编译,你可以这样写代码:

int func( int * buf, size_t size )
{
for( size_t i = 0; i < size; ++i )
{
*(buf + size) = static_cast<int>(i); // or (int)i in C
}
}

int main()
{
int buf[ 6 ];
func( buf, 6 );
}

在您的代码中,a 是指向内存的指针。 a + 5 表示 a 指向的地址 5 个“整数”。由于 a 指向单个整数 b,因此无法保证这样的地址。有趣的是,它被很好地定义为引用 a+1,即使它指向内存中您不应读取或写入的位置。但是指针本身有一些保证,即它会大于 a 并且如果你从中减去 1 你会回到 a 如果你在它之间做一个 ptrdiff和 a 你会得到 1。但这只是“最后一个”的特殊属性,它允许程序员指定内存范围。

关于c++ - 指针行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27939546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com