如何在不改变其*值的情况下改变变量值?

How to change the variable value without changing its * value?

我是C语言新手,正在学习。我正在学习指针。我对下面的程序有点困惑。

我的问题是有没有可能得到 结果 B?我正在更改 a 的值,但相应地, b 的值由于指针而改变,我总是得到 结果A。我怎样才能得到 结果 B?任何帮助将不胜感激。谢谢:)

#include <stdio.h>
 void increment(int value) {
    value++;
}
int main() {
   int a = 6;
   int *b = &a;
   increment(a); 
   if(a == *b) {
     printf("outcome A");
   } else if(a > *b) {
     printf("outcome B");
   } else {
     printf("outcome C");
   } return 0;
} 

您不更改 a 的值,但更改 a 的副本的值,您更改 value

一旦你初始化b=&a并且不改变b的值(等于a地址),所有时间 a == *b 将是真实的。

你可能想做的是:

void increment(int *value) {
    (*value)++;
}

并这样称呼它:increment(&a)。 habing 递增后,b=&a 仍然为真,但是您更改 a.

一个pointer在很多编程语言中是一个对象,用来存储一个内存地址。指针引用内存中的某个位置,获取存储在该位置的值称为取消引用指针

看看这段代码

#include <stdio.h>

int main() {
   int a = 6;
   int *b = &a;
   
   printf("a = %d  b = %p  *b = %d\n", a, (void*)b, *b); 
    
   a = 20;

   printf("a = %d  b = %p  *b = %d\n", a, (void*)b, *b); 
} 

输出:

a = 6  b = 0x7fff3ead8d6c  *b = 6
a = 20  b = 0x7fff3ead8d6c  *b = 20

如您所见,为 a 分配新值并没有更改 b 的值。但是,它确实改变了 b 指向的值。也就是说,b 没有改变,而 *b 改变了。