2 qq 33465534 qq_33465534 于 2016.05.11 16:52 提问

为什么我用指针可以改变常变量的值

如图,能和我解释一下吗?为什么直接赋值不可以,而用指针却可以?图片

5个回答

ZGZ1002
ZGZ1002   2016.05.11 16:57
已采纳

肯定的啊,你定义了一个指针int *p_index; p_index就是个指针,而 *p_index便是指针p_index指向的内容,即是a。 *p_index = 30 等价于 a=30。 所以你改变了p_index指针指向的内容a

qq_33465534
qq_33465534 那为什么赋值语句不能来修改a呢?
大约 2 年之前 回复
qq_33465534
qq_33465534 好像是,等我测试一下
大约 2 年之前 回复
ZGZ1002
ZGZ1002 回复qq_33465534: 不是我没看标题,是我以为你懂得const怎么用呢。
大约 2 年之前 回复
ZGZ1002
ZGZ1002 回复qq_33465534: const 修饰其前面的表示符,如果const在最前面可以往后移动一位,const在这里修改的是int,也就是说int型是不能变的,但是变量a是可以变得。建议你看看const的作用。
大约 2 年之前 回复
qq_33465534
qq_33465534 看了标题吗?
大约 2 年之前 回复
qq_33465534
qq_33465534 你肯定没学过c
大约 2 年之前 回复
CSDNXIAOC
CSDNXIAOC   2016.05.11 17:02

堆和栈
栈:存储空间小,执行效率高。
堆:存储空间大,执行效率低。
栈是本着先进后出的原则。我们所定义的局部变量和形参,都存储在栈内存上。
因为栈在内存中是连续的。我们存贮的变量的变量有序的从栈中 取出,这样就
避免了内存碎片的出现。

在内存中有些不连续的内存区域由链表连起来,就形成了堆。
o(︶︿︶)o 唉 这块真乱……
指针强制改变 变量的值。
#includ......
答案就在这里:C++ 指针改变变量的值
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

ZGZ1002
ZGZ1002   2016.05.11 17:14
wll1228
wll1228   2016.05.12 07:35

要分清楚指针和指针指向的内容两个概念,指针代表地址要赋值也只能给地址,*指针=x才可以改变指向的内容。

kingoftheland
kingoftheland   2017.05.19 08:47

这不是强制转化吗。。。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
指向对象的常指针变量与指向常对象的指针变量区别
1 指向对象的常指针变量与指向常对象的指针变量区别   Time * const p; //指向对象的常指针变量  p的值(p的指向)不能修改   const Time *p;  //指向常对象的指针变量,p指向的类对象的值不能通过p来修改 1.1 指向对象的常指针变量 将指针变量声明为const型,这样指针变量始终保持初值,不能改变,即其所指向不变。 Timet1(10,12,15),
指向变量的常指针和指向常变量的指针
刚接触到指针时,关于指向变量的常指针和指向常变量的指针容易混淆,所以整理下,希望能够帮助自己也帮助到大家。 常(量)指针 常指针就是我们说的指向常量的指针,顾名思义,它是用来指向常量的。 用常指针指向常变量 实际上,C++规定只能用指向常变量的指针指向常变量,普通指针指向它就会报错,原因也很容易理解,我们用普通指针指向常变量之后,有可能就会进行改变常变量数值的操作,这样做是不被允许
数组名是常指针,不能被赋值
不能把字符串"HELLO!"赋给数组b的语句是() 正确答案: B   你的答案: B (正确) char b[10]={'H','E','L','L','O','!','\0'}; char b[10];b="HELLO!"; char b[10];strcpy(b,"HELLO!"); char b[10]="HELLO!";
C语言通过指针修改变量的值
C语言学习笔记之通过指针修改变量的值 1.C语言的基本结构介绍 2.C语言的数据类型 3.通过指针改变变量的值 总结:
字符串指针与字符数组的区别(一)--字符串常量的值不能改
经常犯错的知识点,以前也没有理解,这里再好好的记录下。要经常温固而知新。  用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题: 1.     字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
const变量通过指针修改 详解
本来以为const变量是无法修改的,今天发现“错了”(其实没错,通过const变量本事是无法修改其值的,但是在“某些情况下”可以通过指向它的指针来间接修改) 一、const变量可以通过指针修改的情况 例子: #include <stdio.h> void main(void) { int const a = 10; int b = 20; int *p = (int*)
在子函数中改变指针变量的值的方法
先看一段代码: #include void foo(char *p) {    p = "after foo()"; }     void main() {    char *p = "before foo()";    foo(p);        cout } 如果你指望函数foo能帮你改变p的值,那你就错了。因为指针也是变量,它在函数调用过程中也是传值调用
指针变量作为函数参数为了改变指针变量指向实参的值
转自百度知道: 思考:为什么两个运行结果不同            C语言使用值传递时,仅仅将实参的值传递给形参。 对于第一种写法 main函数传递给Swap函数的是&a和&b的值,即a和b所在的地址的值 那么Swap函数里面通过*x来更改的就是&a所在的地址里面的值,也就是a本身的值了,所以第一种写法main函数调用
区分指向对象的常指针和常对象的指针
一个C++程序来区分指向对象的常指针和常对象的指针 #include using namespace std; class Time { public: Time(int); Time(int,int,int,int); ~Time(); void get_time(); void set_time(int,int,int); void show_time() const;
C语言易错点(函数里修改传入变量的值不会改变传入变量的指针)
函数里修改传入变量的值不会改变传入变量的指针    相关语句如下: uint8_t a,b,c;     a=4;     b=6;     c=0;     oled_printf(0,0,"a:%d b:%d c:%d",a,b,c);     c=Max_Common_Divisor(a,b);     oled_printf(0,1,"A:%d B:%d C:%d",