相关疑难解决方法(0)

508
推荐指数
8
解决办法
5万
查看次数

我们可以通过指针改变用const定义的对象的值吗?

#include <stdio.h>
int main()
{
    const int a = 12;
    int *p;
    p = &a;
    *p = 70;
}
Run Code Online (Sandbox Code Playgroud)

它会起作用吗?

c const undefined-behavior

28
推荐指数
4
解决办法
3万
查看次数

这个邪恶的演员是否被邪恶的编辑器打败了?

这不是学术准则或假设性问题.最初的问题是将代码从HP11转换为HP1123 Itanium.基本上它归结为HP1123 Itanium上的编译错误.在Windows上进行复制时,我真的很抓头.除了最基本的方面之外我已经删除了......如果按原样运行,可能必须按控制D退出控制台窗口:

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char blah[6];
    const int IAMCONST = 3;
    int *pTOCONST;
    pTOCONST = (int *)  &IAMCONST;
    (*pTOCONST) = 7;
    printf("IAMCONST %d \n",IAMCONST);
    printf("WHATISPOINTEDAT %d \n",(*pTOCONST));
    printf("Address of IAMCONST %x   pTOCONST %x\n",&IAMCONST, (pTOCONST));
    cin >> blah;    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出

IAMCONST 3
WHATISPOINTEDAT 7
Address of IAMCONST 35f9f0   pTOCONST 35f9f0
Run Code Online (Sandbox Code Playgroud)

我只能说是什么?这样做是不明确的?对于这样一个简单的例子,这是我见过的最违反直觉的事情.

更新:

确实在搜索了一段时间后,菜单调试>> Windows >>反汇编完全具有下面描述的优化.

    printf("IAMCONST %d \n",IAMCONST);
0024360E  mov         esi,esp 
00243610  push        3    
00243612  push        offset …
Run Code Online (Sandbox Code Playgroud)

c++

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

在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
查看次数

c中的初始化vs未初始化的全局const变量

对不起,我不太善于解释问题.所以我直接从例子开始

请看下面的例子

const int a=10;
int *ptr;

int main(){
    ptr=&a; 
    *ptr=100;   // program crashes
    printf("%d",a);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在上面的代码中稍作修改,如下所示

const int a; // uninitialized global variable 
Run Code Online (Sandbox Code Playgroud)

那么上面的代码工作正常.

所以我的问题是为什么编译器对uninitialize和初始化全局const变量的行为不同?

我正在使用gcc for windows(mingw).

c

3
推荐指数
2
解决办法
3865
查看次数

使用指针更改const变量值

以下程序的输出在gcc上为50.怎么可能因为x是常量变量而*p是x本身,因为p是指向x处的值的常量指针.turbo c给编译器错误的地方.这是一个未定义的行为吗?请解释.

#include<stdio.h>

int main()
{
    const int x = 25;
    int * const p = &x;
    *p = 2 * x;
    printf("%d", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

2
推荐指数
1
解决办法
322
查看次数

在C++中修改const int

运行以下代码显示&x = ptr,那么x和*ptr怎么不相等?

const int x=10;
int* ptr =(int*) &x;
*ptr = (*ptr)+1;

cout << &x << " " << x << "  " << ptr <<"  " <<*ptr;  //output : 0012FF60 10  0012FF60  11
Run Code Online (Sandbox Code Playgroud)

c++ pointers const

1
推荐指数
2
解决办法
348
查看次数