相关疑难解决方法(0)

如果我可以通过C中的指针修改它,那么const限定符的目的是什么?

可能重复:
邪恶的演员是否被邪恶的编译器打败了?

你好,

如果我可以通过指针修改常量,那么它的目的是什么?以下是代码:

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

int main()
{
 const int a = 10;
 int *p = (int *)&a;

 printf("Before: %d \n", a);
 *p = 2;
 /*a = 2; gives error*/

 printf("After: %d \n", *p);

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

之前:10
之后:2
按任意键继续...

使用Visual Studio 2008.

c pointers const qualifiers

7
推荐指数
2
解决办法
731
查看次数

有没有办法(实际上)保护对象不被修改?

const类型限定符使编译器的情况下发出一个错误消息试图修改声明为一个对象const,但这是不够的protection.For例如以下程序修改声明为所述阵列的两个元件const:

#include <stdio.h>

int main(void)
{
    const char buf[2] = { 'a','b' };
    const char *const ptr = buf;
    unsigned long addr = (unsigned long)ptr;

    *(char *)addr = 'c';
    addr = addr + 1;
    *(char *)addr = 'd';

    printf("%c\n", buf[0]);
    printf("%c\n", buf[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以,事实证明编译器没有足够的保护来保护对象不被修改.我们如何防止这种事情?

c

7
推荐指数
1
解决办法
159
查看次数

为什么我可以通过指针转换而不是C中的全局变量来更改本地const变量?

我想通过使用指针来改变常量的值.

请考虑以下代码

int main()
{
    const int const_val = 10;
    int *ptr_to_const = &const_val;

    printf("Value of constant is %d",const_val);
    *ptr_to_const = 20;
    printf("Value of constant is %d",const_val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,常量的值被修改.

但是当我尝试使用全局常量的相同代码时,我遇到了运行时错误.Windows崩溃记者正在开放.在此语句"*ptr_to_const = 20;"中打印第一个printf语句后,可执行文件暂停

请考虑以下代码

const int const_val = 10;
int main()
{
    int *ptr_to_const = &const_val;
    printf("Value of constant is %d",const_val);
    *ptr_to_const = 20;
    printf("Value of constant is %d",const_val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序使用codeblocks IDE在mingw环境中编译.

谁能解释一下发生了什么?

c pointers constants

4
推荐指数
2
解决办法
2087
查看次数

在C中,可以通过指针修改const变量吗?

我在代码中写了一些类似的东西

const int x=1;
int *ptr;
ptr = &x;
*ptr = 2;
Run Code Online (Sandbox Code Playgroud)

这适用于所有编译器吗?为什么GCC编译器没有注意到我们正在改变一个常量变量?

c pointers const

4
推荐指数
1
解决办法
4143
查看次数

内部如何工作int const iVal = 5; (int&)iVal = 10;

我想知道以下如何工作@编译器级别.

int const iVal = 5; 
(int&)iVal = 10; 
Run Code Online (Sandbox Code Playgroud)

一点m/c或编译器级别的答案会非常充实.

提前致谢.

c c++ compiler-construction

0
推荐指数
2
解决办法
695
查看次数

标签 统计

c ×5

pointers ×3

const ×2

c++ ×1

compiler-construction ×1

constants ×1

qualifiers ×1