相关疑难解决方法(0)

为什么这个volatile变量的地址始终为1?

我想检查变量的地址

volatile int clock;
cout << &clock;
Run Code Online (Sandbox Code Playgroud)

但它总是说x在地址1.我做错了什么?

c++ iostream cout memory-address implicit-conversion

22
推荐指数
2
解决办法
1427
查看次数

为什么ostream为定义为`volatile char []`的字符串打印`1`?

考虑这个(人为的)例子:

#include <cstdio>
#include <iostream>

int main() {
  volatile char test[] = "abc";
  std::printf("%s\n", test);
  std::cout << test << "\n";
}
Run Code Online (Sandbox Code Playgroud)

使用GCC进行编译并运行会提供以下输出:

$ g++ test.cc 
$ ./a.out 
abc
1
Run Code Online (Sandbox Code Playgroud)

如您所见,printf打印时正确cout打印字符串1.为什么写cout产生1在这种情况下?

c++ string printf iostream volatile

16
推荐指数
2
解决办法
570
查看次数

C/C++:抛弃挥发性被认为有害吗?

(与这个问题有关,抛弃挥发物是否安全?,但不完全相同,因为该问题与特定实例有关)

是否有过在那里虚掷的情况下volatile被认为是危险的做法?

(一个特定的例子:如果声明了一个函数

void foo(long *pl);
Run Code Online (Sandbox Code Playgroud)

我必须实施

void bar(volatile long *pl);
Run Code Online (Sandbox Code Playgroud)

有()我需要执行栏的一部分来调用foo(PL),然后好像我不能得到这个作为是工作,因为假设由foo的编制()和bar的调用者的编辑制作()不兼容.)


作为推论,如果我有一个volatile变量v,我想打电话给foo(&v)别人的功能void foo(long *pl),那人告诉我这是安全的,我可以调用之前投的指针,我的直觉是要告诉他们,他们错了,因为没有办法保证,void foo(volatile long *pl)如果他们想支持使用volatile变量,他们应该更改声明.我们哪一个是正确的?

c c++ volatile

12
推荐指数
3
解决办法
5426
查看次数

关于C++中地址空间的问题

请阅读以下C++代码和结果.根据一些维基页面,静态,自动和动态分配的变量分配在不同的地址空间中,即数据段,堆栈和堆.但是,在我看来,静态和动态变量的地址大致相同.为什么会这样?我怎么知道静态变量真的在数据段中,而不是在堆中?

一个更广泛的问题是,在C++中是否有可能知道每个地址空间的范围(或可用大小)?

我的另一个问题是为什么volatile变量的地址是1?

#include <iostream>
using namespace std;
static int i;
int main() {
    cout << sizeof(int*) << endl;
    int j;
    int* k = new int[10];
    volatile int l;

    cout << &i << endl;
    cout << &j << endl;
    cout << k << endl;
    cout << &l << endl;

    delete[] k;
}
Run Code Online (Sandbox Code Playgroud)

结果:

8
0x1000010e4
0x7fff5fbff66c
0x100100080
1
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
1814
查看次数