调用printf()时,*b的值是否未定义?
void foo(int *a) {
const int *b = a;
int *c = a;
*c = 2;
printf("%d\n", *b); // what must be *b? 1, 2 or undefined?
}
int d = 1;
foo(&d);
Run Code Online (Sandbox Code Playgroud)
dat*_*olf 11
它将打印2. const int *b字面意思是:
指向整数的指针,该整数的值不能通过其去引用来改变.
这并不意味着指针指向的值可能不会改变.事实上,改变是完全有效的.使用它的一种可能方案是保持对某些大型结构的只读引用的结构.引用可能会更改,但使用该结构的函数可能不会更改指针后面的内容.
想象一下驱动程序或类似程序,它发出了设备传送的任何数据的只读内存映射:映射的地址不是常量,但由于这是一个只读映射,因此用户程序可能无法写入.OTOH当设备更新数据时,缓冲区的内容将发生变化,但不一定是映射地址.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |