gpt4 book ai didi

c - 将指针传递给 C 中的函数

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

今年我要学习数据结构类(class),所以我决定通过做一些关于 C 中指针的简单任务来更新我对 C 的知识,并且我注意到关于将指针传递给函数的一件事,我可以'不太明白。

假设我们有一个函数:

void assignValueTen(int *var){
*var=10;
}

我们可以像这样从 main 调用这个函数:

int main( void ){
int x;
assignValueTen(&x);
printf("The value of x is %d.\n",x);
return 0;
}

其输出将是:

The value of x is 10.

我们也可以这样调用这个函数:

int main( void ){
int x, *y;
y=&x;
assignValueTen(y);
printf("The value of x is %d.\n",x);
return 0;
}

其输出也将是:

The value of x is 10.

但是,下面的语句不能按预期工作:

int main( void ){
int *x;
assignValueTen(x);
printf("The value of x is %d.\n",*x);
return 0;
}

上面代码的输出是:

Process exited after 6.723 seconds with return value 3221225477

那么,为什么代码可以编译但没有按预期工作?
是不是因为上一个例子中指针之前还没有分配到任何地址?
有人可以更详细地解释为什么会发生这种情况吗?
非常感谢!

最佳答案

不起作用的是因为 x 没有被分配任何特定的值。函数中的赋值是在未初始化的变量恰好指向的地方进行赋值,并且该地址不太可能是有效地址(如硬件所见),即使它是有效的(再次根据硬件),它也不在您< em>应该写入(因为该地址“属于”除您在 main 中运行的代码之外的其他内容)。

您应该只访问您有理由知道有效的地址(您的 allocateValueTen 函数具有诸如隐式要求),尽管其他一些语言可以,但 C 确实没有办法强制执行此类要求契约(Contract)。

关于c - 将指针传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52683595/

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