gpt4 book ai didi

c - 什么是指针能做而变量不能做的?

转载 作者:太空狗 更新时间:2023-10-29 17:24:13 25 4
gpt4 key购买 nike

我正在学习指针,有人告诉我:“指针的目的是允许您手动、直接访问一 block 内存。”

假设我有 int var = 5;。我不能使用变量“var”来访问存储值 5 的内存块吗,因为我可以随时更改变量的值 var = 6;?当我可以仅通过使用其变量而不是使用指向存储值的地址的指针来访问任何变量的值时,我真的需要指针吗?

最佳答案

"The purpose of pointers is to allow you to manually, directly access a block of memory."

这并不总是正确的。考虑

*(int*)(0x1234) = some_value;

这是“直接”内存访问。虽然

int a = some_value, *ptr = &a;
*ptr = some_other_value;

您现在正在访问 a 间接

Can't I use the variable 'var' to access the block of memory where the value 5 is stored, since I can change the value of the variable whenever I want var = 6; ?

当然;但语义不同。

Do I really need a pointer when I can access any variable's value just by using its variable, instead of using a pointer that points to the address where the value is stored?

不,你不知道。考虑第一个例子:在声明了a 的范围内,通过ptr 修改它的值是毫无意义的! 但是,如果你不在a范围内怎么办?也就是

void foo(int x)
{
x = 5;
}

int main(void)
{
int x = 10;
foo(x);
}

foo中,当你做x = 5时,有一个歧义:你想修改foo::x还是主要::x?在后一种情况下,必须明确地“请求”并且通过指针发生的事实 - 或者更好的是通过间接 - 是巧合和语言选择。其他语言有其他语言。

关于c - 什么是指针能做而变量不能做的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32806104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com