c语言,const被绕过

注意在现在的gcc中, const可能会被用指针绕过。

linux:

// demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
	const int ii = 1234;
    printf("ii = %d\n", ii); // error C2440: “初始化”: 无法从“const int *”转换为“int *”

    int* p = &ii;
    (*p) = 444;
    printf("ii = %d\n", ii);
	return 0;
}

  

vs2010不会被绕过:

// demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
  const int ii = 1234;
    printf("ii = %d\n", ii); // error C2440: “初始化”: 无法从“const int *”转换为“int *”

    int* p = &ii;
    (*p) = 444;
    printf("ii = %d\n", ii);
  return 0;
}

  

时间: 2024-10-11 13:34:01

c语言,const被绕过的相关文章

c语言const关键字

作者:沉默羔羊 c语言const关键字: --  特点. 使用该关键修饰的变量不能被改变.      --指针常量. demo:   const char *p或者是 char const * p --常量指针. demo: char * const p      --常量指针和指针常量. 1.常量指针指的是如 char * const p, p是一个常量,p不能改变指向. 2.指针常量指的是如char const *p,   p指向一个字符常量,p可以改变指向.但是不能改变*p. --对于常量

《OOC》笔记(1)——C语言const、static和extern的用法

<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用const修饰的函数形参 直接修饰 一个形如 int Minus(const int a, const int b, int testCase); 的函数,const的意义是什么呢? 答:参数a被const修饰,说明在Minus函数内,编译器不允许a被别的变量(例如x)赋值(修改).参数b同理. 如果你写了a

C 语言 const 关键字

#include <stdio.h> int main(void){ int i = 1; int j = 100; const int * temp = &i; printf("%d\n",*temp); i = 2; printf("%d\n",*temp); temp = &j; printf("%d\n",*temp); return 0; } 输出 12100 #include <stdio.h>

【转】话说C语言const用法

原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量.例:void func(){const int a=0;} 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我们给它赋予初始值0. 然后再看const. const作为一个类型限定词,和int有相同的地位.const int a;int const a;是

C语言const与define的使用

const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题. 问题:const变量 & 常量 为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? const int n = 5;int a[n]; 答案与分

话说C语言const用法

const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰 的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量. 例: void func(){ const int a=0; } 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量, 我们给它赋予初始值0. 然后再看const. const作为一个类型限定词,和int有相同的地位. const int a; int const a; 是等价的.于是此

C语言-const和volatile深度分析

1.const只读变量 const修饰的变量是只读的.本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局数据区分配空间 const只在编译期有用,在运行期无用 const修饰的变量不是真的变量,它只是告诉 编译器该变量不能出现在赋值符号的左边实例一.cpp: 1 #include <stdio.h> 2 3 const int g_cc = 2; 4 5 int main() 6 { 7 const int cc = 1; 8 9 int* p = (int*

c语言 const关键字辨析

#include <stdio.h> void func_1(const int* i){ func_2(i); } void func_2(int* i){ *i++; printf("i in func_2 %d\n", *i); } int main(){ int i=0; func_1(&i); printf("i in whole situation %d\n", i); return 0; } 输出结果: i in func_2 0

c语言const

1 const关键字 2 const int i = 14 3 const和指针结合,共有4种形式 4 const int *p; p是一个指针,指针指向一个int型数据.p所指向的是个常量. 5 int const *p; p是一个指针,指针指向一个int型数据.p所指向的是个常量. 6 int *const p; p是一个指针,指针指向一个int型数据.p本身是常量,p所指向的是个变量 7 const int *const p; p是一个指针,指针指向一个int型数据.p本身是常量,指向的也