c++ - 指针行为异常

标签 c++ c pointers

我是一名编程和 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/

相关文章:

c++ - 为什么打印浮点值时出现字符 'e'

c - 从函数中的数组参数存储指向文件范围内数组的指针

c - 在 C 中转换时出现问题

iphone - 指针、NSMutableArray、保留、循环和困惑

c++ - 返回异步结果 - 高效处理同步情况

c++ - 什么是更好的?如果 child 是类的成员,是否为 child 设置 QObject 父级?

c - 测试递归函数 - C

函数类型冲突和强制转换警告?

c++ - 将多个指针作为参数传递给 pthread_create

c++ - 基于 type_info 对象的特殊化代码