gpt4 book ai didi

c - C 中指针的工作

转载 作者:行者123 更新时间:2023-11-30 18:32:33 25 4
gpt4 key购买 nike

我在 YouTube 上观看理查德·巴克兰 (Richard Buckland) 讲座,他展示了指针的工作原理,但我在这里遇到了一些问题根据他的说法,我们使用指针是因为有时我们可能不知道包含值的变量例如

void main()
{
int x=20,y=30;
task(x,y)
getch();
}
void task(int x,int y)
{}

因此它将在task()中创建变量x和y的两个副本,它们完全独立于原始变量,因为task()不知道原始变量,因此我们使用指针,以便task()可以直接获取访问 main() 变量 x 和 y 的地址。

所以,如果我们说&x,它指的是x值所在的地址,但如果我们说*x,那就意味着*20,这类似于地址20上的值,对吧?如果我们遵循 C 中指针的概念,这是正确的。

但它没有返回位于地址 20 上的值,而是显示“无效间接寻址”错误。

这并不是说我不知道​​这个错误,而是这就是为什么 c 编译器给我这个错误。我仍然遵循指针的概念,但以不同的方式。所以我想在概念上我是正确的,但在语法上我仍然是错误的。为什么?

最佳答案

*20 that's something like the value located on the address 20 right?

对,或多或少,但是:

  • 这实际上是地址 20开始的值。为了让编译器知道值的大小和表达式的类型,它必须知道您所指的值的类型,因此您必须强制转换 20 到适当的指针类型。例如,(int*)20 是一个指向 int 的指针,因此 *((int*)20) 的类型为 int
  • 您不能安全地“编造”这样的地址,因为您实际上不太可能分配到包含地址 20 的内存块。

关于c - C 中指针的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535151/

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