如何在不改变其*值的情况下改变变量值?
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 改变了。
我是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 改变了。