c - 将指针传递给 C 中的函数
问题描述
我今年要学习数据结构课程,所以我决定通过做一些关于 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 没有特别分配任何值。函数中的赋值是在未初始化变量碰巧指向的任何地方进行赋值,并且这不太可能是有效地址(因为硬件看到的东西),即使它是有效的(再次根据硬件),它也不在你应该的地方正在写入(因为地址将“属于”您在 main 中运行的代码以外的其他内容)。
您应该只访问您有理由知道有效的地址(您的 assignValueTen 函数具有诸如隐式要求),尽管其他一些语言可以执行此类要求合同,但 C 并没有真正的方法。
推荐阅读
- sql - SQL BigQuery - 在“IN”子句中使用 WITH 视图
- php - 将 2 个表中的 2 个不同 id 保存到另一个表中
- git - 将 git 浅克隆转换为部分克隆
- substrate - 错误:特征绑定 `types::DepartmentDetails: scale_info::TypeInfo` 不满足
- python - 为什么我的神经网络的准确率没有提高?
- javascript - JQuery - 删除字符后的文本,保持字符串逗号分隔
- css - 如何通过 React-Joyride 垂直居中目标元素
- outlook-addin - Outlook 插件清单文件
- amazon-web-services - java.io.IOException:方案没有文件系统:s3
- node.js - ERR_INVALID_ARG_TYPE “数据”参数必须是字符串类型或 Buffer、TypedArray 或 DataView 的实例。收到未定义。仅在 Docker 上