const_cast和const指向const vaiable的指针

时间:2016-02-22 00:49:30

标签: c++ pointers casting const const-cast

*p的值和DIM的值有何不同,但内存中的地址相同?

const int DIM=9;
const int *p = &DIM;

* (int *) p = 18;     //like const_cast

cout<< &DIM <<"    "<< p << '\n';
cout << DIM << "   " << *p << '\n';

3 个答案:

答案 0 :(得分:2)

您正在更改jQuery(document).ready(function($){ $('#add-ingredient').on('click', function(event) { event.preventDefault(); var lastIngredient = $(this).prev('[class^="ingredient-').attr('class'); var x = lastIngredient.replace('ingredient-', ''); x = parseInt(x) + 1; var html = '<div class="ingredient-'+ x + '">' + '<input type="text" name="recipe_ingredients['+ x + '][amount]" id="amount" placeholder="amount" value="<?php echo $recipe_ingredients['+ x + '][amount]; ?>" />' + '<input type="text" name="recipe_ingredients['+ x + '][unit]" id="unit" placeholder="unit" value="<?php echo $recipe_ingredients['+ x + '][unit]; ?>" />' + '<input type="text" name="recipe_ingredients['+ x + '][ingredient]" id="ingredient" placeholder="ingredient" value="<?php echo $recipe_ingredients['+ x + '][ingredient]; ?>" />' + '<input type="text" name="recipe_ingredients['+ x + '][notes]" id="notes" placeholder="notes" value="<?php echo $recipe_ingredients['+ x + '][notes]; ?>" />' + '</div>'; $(this).before(html); return false; }); }); 变量的值,即未定义的行为。字面上,当你这样做时,任何事情都可能发生,包括你的程序崩溃,你的计算机爆炸......,

如果变量应该更改,不要使它变为。编译器可以自由地优化对const变量的访问,因此即使您找到了一种更改内存中值的成功方法,您的代码甚至可能无法访问原始内存位置。

答案 1 :(得分:2)

这是一个编译器优化。鉴于DIM是常量,编译器可以替换其已知值。

答案 2 :(得分:0)

下面的代码执行您要执行的操作...如其他帖子中所述,如果您要更改变量的值,请不要将其定义为const

#include <stdio.h>

int main()
{
    int d= 9;
    int *p_d=&d;

    *p_d=18;

    printf("d=%d\np_d=%d\n",d,*p_d);
    return 0;
}

此代码打印

d=18
p_d=18