从一道笔试题理解const关键字
2016-09-21 22:26
232 查看
有如下代码:
#include <stdio.h>
int main()
{
const int a=1;
int *b=(int *)&a;
int c=3;
const int *d=&c;
*b=2;
c=4;
printf("a=%d,b=%d,c=%d,d=%d",a,*b,c,*d);
return 0;
}问输出结果是多少?
我刚开始这样理解:a被定义为一个初值为1的常量,将a的地址强制转化为int型指针后赋给int型指针b,d被定义为指向变量c的int型指针,该指针所指内容为常量,最后对*b和c赋值,由于a和*d都被const声明,那么改变*b和c应该不影响它们的值,所以输出应该是1,2,3,4。然而结果与我的预期并不相同:
变量a和c的值均被改变,为什么已经声明为const了,值还能改变?
我觉得可以这样理解,const只是对变量的“只读”声明,不能给该变量赋值,比如a=2,编译将出错:
||=== Build: Debug in const (compiler: GNU GCC Compiler) ===|
D:\codeblocks projects\const\main.c||In function 'main':|
D:\codeblocks projects\const\main.c|6|error: assignment of read-only variable 'a'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
但却可以通过别的指向该内存空间(&a)的指针去改变该空间的变量值(如题目中的*b),即const只是对变量a而言的,并不是对内存空间而言。
另外,对于指针d,定义为const int *d=c表明d指向的变量不能改变,即不能用*d=1这样的语句赋值,但可以改变变量c的值。由于d指向变量c的地址,所以*d也会同时改变。
#include <stdio.h>
int main()
{
const int a=1;
int *b=(int *)&a;
int c=3;
const int *d=&c;
*b=2;
c=4;
printf("a=%d,b=%d,c=%d,d=%d",a,*b,c,*d);
return 0;
}问输出结果是多少?
我刚开始这样理解:a被定义为一个初值为1的常量,将a的地址强制转化为int型指针后赋给int型指针b,d被定义为指向变量c的int型指针,该指针所指内容为常量,最后对*b和c赋值,由于a和*d都被const声明,那么改变*b和c应该不影响它们的值,所以输出应该是1,2,3,4。然而结果与我的预期并不相同:
变量a和c的值均被改变,为什么已经声明为const了,值还能改变?
我觉得可以这样理解,const只是对变量的“只读”声明,不能给该变量赋值,比如a=2,编译将出错:
||=== Build: Debug in const (compiler: GNU GCC Compiler) ===|
D:\codeblocks projects\const\main.c||In function 'main':|
D:\codeblocks projects\const\main.c|6|error: assignment of read-only variable 'a'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
但却可以通过别的指向该内存空间(&a)的指针去改变该空间的变量值(如题目中的*b),即const只是对变量a而言的,并不是对内存空间而言。
另外,对于指针d,定义为const int *d=c表明d指向的变量不能改变,即不能用*d=1这样的语句赋值,但可以改变变量c的值。由于d指向变量c的地址,所以*d也会同时改变。
相关文章推荐
- C的关键字——const的理解和用法
- c++ primer 中的 const 关键字理解
- c语言中const 关键字的理解
- 理解PHP5中static和const关键字的区别
- C的关键字——const的理解和用法
- 《我对const修饰符应用的理解》读后感--const关键字的非主
- C的关键字——const的理解和用法
- C/C++ const关键字的理解
- c++中的const关键字的理解
- 关于C的关键字——const的理解和用法
- 对const关键字的理解
- const关键字简单理解
- 关于C的关键字——const的理解和用法小总结
- C的关键字——const的理解和用法
- 理解PHP5中static和const关键字的区别
- 对const关键字的理解
- c语言学习笔记之const关键字(理解)
- 【C/C++学习】const关键字的理解
- const关键字的深入理解
- 指针常量C语言关键字const再理解