c - C语言中的int a[]、int *a1[]、int *a2有什么区别?
问题描述
我是 C 新手,我正在学习指针和数组。我的教授告诉我,我可以使用指针代替数组,反之亦然。但是,在我编程的时候,我发现它们之间在用法上有一些区别。例如,
int b[] = {1,2,3}; //I consider b as a pointer point to b[0]
int *ptr=b;
ptr++; //works well and point to 2
b++; //I suppose it will point to b[1] but it doesn't work :(
这只是一个例子。我对int a[]
、int *a1[]
和int *a2
(我知道基本概念)以及它们在内存模型中的工作方式感到非常困惑?指针/数组允许哪些语法(用法?)?(如上例)
谢谢~
解决方案
嗯...b
是一个数组。b++ 什么都不做。它会返回一个错误,因为您正在递增到一个不可变变量。
因此,当您将指针分配给ptr
数组时,b
您将指向数组的内存地址,并且默认情况下ptr
将指向数组中零的索引b
(为 1)。
因此,当您编写时,您ptr++
将索引号加一,ptr
然后指向该索引中保存的下一个索引值b
(ptr = b(也就是 ptr = 0),b[0] = 1,ptr++, ptr = 1,b[1] = 2 等等)。
我希望这会有所帮助..
推荐阅读
- html - 为什么我的搜索按钮在我的搜索栏下方
- r - ggpubr (stat_compare_means) 中是否有一种方法可以在假设方差相等的情况下运行测试比较(而不是 R 默认 Welch 的 t 检验)
- python - Python:如何确定可以精确表示哪些浮点值并在不可以时发出警告?
- mysql - 如何使用带条件的 JOIN
- html - 如何摆脱导航栏和滑块之间的间距?
- c++ - 我如何使用十一位数字
- c++ - 为什么 C++ 不允许在条件运算符中进行隐式列表初始化?
- dart - Flutter - 如何更改和保存从 SharedPreferences 检索到的整数?
- objective-c - 我如何写一个 BLOB,任何 BLOB 到 sqlite?
- php - 我的帖子栏之间有一个难以理解的空间,如何解决?