下列代码给出输出结果:
#include"stdafx.h"
#include <iostream>
#include "stdlib.h"
using namespace std;
int main(void)
{
const int a = 10;
int * p = (int *)(&a);
*p = 20;
cout << "a = " << a << ", *p = " << *p << endl;
cout << &a << endl << p << endl; //本人测试时添加的
system("pause");
return 0;
}
运行结果如下:
...* p = (int *)(&a);*p=20; 为什么结果是a=10,*p=20?
编译器优化的结果,编译器在处理 const int a = 10;这句时 没有为a分配内存赋值,而是在加入了符号表,后续引用a时有些类似#define a 10这样处理了 int * p = (int *)(&a);这句则 配*p被强制赋值,所以指针有效指向了某个地址,所以出现了上述结果 ...
c语言中const修饰的到底是常量还是变量?
const int a = 0;a = 10;} 这个比较容易理解,编译器直接报错,原因在于“a = 10;”这句话,对const修饰的变量,后面进行赋值操作。这好像说明了const修饰的变量是不能被修改的,那究竟是不是那,那么下面我们把这个例子修改下:int main { char buf[4];const int a = 0;buf[4] = 97;...
C++ 中:const int * a 和 const int * & a的区别。
const int *a 是指向const int 变量的指针,const int *& a 是指向const int 变量的指针的引用,在座函数形参时,区别是很大的,函数的参数进行的是值拷贝,即使传的是指针,也的对指针(即指针里存的地址)的拷贝,因此,如果在函数内部改变了参数自身的地址,比如使参数等于NULL,此时是不会影响函数外...
c++ int * const p=&a 是什么含义
void main(){ int a = 10;int * const p = &a;\/\/下面这个语句是错误的 p++;\/\/下面这个语句是正确的 p = 11;cout << "a的值是 " << a << endl;} 将会输出“a的值是 11”
int *p=(int *)&a;是什么意思啊?
这是因为如果不加(int*)进行强制转换,在C++编译器中是无法通过编译的。a加了const表示常量,告诉编译器这不能修改值,而如果进行int *p = &a;这就可能通过p修改a的值,C++编译器会阻止你这么做,编译报错。加了(int*)&a编译器就不管你了,它的检查工作是完成了但留下了隐患。运行这个代码你会...
请教C语言高手,C语言常量变量能通过地址去修改吗?
问针对问题3: static const int a=10;后a在常量区,该内存块不允许修改,如果修改系统会抛出异常,可改成下面代码,在VC2010下测试:include <stdio.h>#include <stdlib.h>int main(){ static const int a=10; int *p,b; p=(int *)&a; try { *p=20; printf("try【%d,%...
C++ const_cast的一个问题
你第一代码运行的结果是因为通过a读取的值不是来自内存,可能来自缓存或者寄存器。const关键字在C++用于定义编译时或者运行时的常量,常量意味着它的值是不会变,所以编译器可以对此进行优化,将它的值直接放到高速缓存或者寄存器中,从而避免直接在内存中读取常量的值的开销。第二段代码,你将变量放入了结构...
C++中,int *& 与 int &* 的区别、意义及使用
int &*a 可以解释为,int类型引用 的指针(C++不允许声明 指向引用的指针)。const 是限定符 const int a; \/\/const 限定 int,即 a 是一个变量,类型为int的常量。(所以,int常量不可修改,所以a也不可修改)int const a; \/\/ const 限定 a,即 a 是一个常量,类型为int。const int *a...
const int a=9; int *p=&a; *p=6; 可以把a改为6,只警告不报错 co_百 ...
const int a=9;int *p=&a;的意思是一个普通int*型指针p指向了一个常量(指向的也可以不是常量),所以*p从语法上是可以改变的,但当前的内容是const型,所以只警告是否搞错了。这里还有一点需说明,一种观点认为,C中的const修饰的变量性质是变量,只是它的值不允许改变,而C++中的const修饰的就认为...
C++中定义数组时报错,数组大小为0。
对于数组的定义,必须为常数大小,不能用变量来定义大小的。int M=N*N;int t[M];上面定义的M是一个变量,肯定会报错。你可以在 main()前面宏定义一下。加一句: #define M 25 或采用动态分配数组大小,new,delete都就行了。