【问题标题】:C storing address of a variable in arrayC在数组中存储变量的地址
【发布时间】:2015-01-13 07:10:30
【问题描述】:
void main()
 {
 int a=10;
 int *j;
 *j=&a;
 b[]={1,2,3,4};
 b=j;
 }

有人问我这个程序有什么问题,我只是对我感到困惑,一切似乎都很好。只是想知道。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请尽快阅读About 页面以及What should main() return in C and C++。对于这样的问题,立即的反应是What have you tried?,并明显建议您尝试编译代码。编译器有很多可抱怨的地方。
  • 您尚未阅读引用的链接。只有在使用 Microsoft 编译器在 Windows 上编程时,代码才能避免因main() 的返回类型而受到谴责。
  • 对不起,感谢您的宝贵意见,我正在阅读链接。下次我会记住它

标签: c arrays pointers


【解决方案1】:

打开所有编译器警告和错误。然后它会告诉你程序到底出了什么问题。

*j = &a; 是违反约束的。 *j 的类型为 int,但 &a 的类型为 int *,这是不兼容的。

您可能指的是j = &a;,它将指向ja

b[]={1,2,3,4}; 是语法错误。也许你的意思是int b[]={1,2,3,4}; 会声明一个数组。

b=j; 是违反约束的,因为b 是一个数组,无法分配数组。 (从技术上讲:因为b 是一个数组,所以会衰减到一个右值并且不能分配右值)。

但是,j = b; 可以,它会使j 指向b 的第一个成员;

void main() 是不可移植的,应该是int main()

【讨论】:

  • 非常感谢您的清晰解释。我想提高我的 c 技能,你能推荐我可以学习和专业 c 的任何书籍或网站吗?
  • @Shreesh 请参阅 this thread 获取书籍推荐
  • 练习,练习,再练习。有很多不错的 C 书籍;也有很多穷人。 ACCU 有很多 C 类书籍的书评。 King's C Programming — A Modern Approach 至少还不错 (ACCU)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 2013-05-14
  • 2012-08-07
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多