首页 > 解决方案 > 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(我知道基本概念)以及它​​们在内存模型中的工作方式感到非常困惑?指针/数组允许哪些语法(用法?)?(如上例)
谢谢~

标签: cmemory

解决方案


嗯...b是一个数组。b++ 什么都不做。它会返回一个错误,因为您正在递增到一个不可变变量。
因此,当您将指针分配给ptr数组时,b您将指向数组的内存地址,并且默认情况下ptr将指向数组中零的索引b(为 1)。
因此,当您编写时,您ptr++将索引号加一,ptr然后指向该索引中保存的下一个索引值b(ptr = b(也就是 ptr = 0),b[0] = 1,ptr++, ptr = 1,b[1] = 2 等等)。
我希望这会有所帮助..


推荐阅读