您的位置:首页 > 编程语言 > C语言/C++

C语言学习之路之数组的一些浅见

2018-03-08 21:56 274 查看
第一次写博客文章,有什么不对的地方,请勿见怪.
对函数传递数据的一些体会.当我们定义一个函数的时候,当参数传递的是数组的时候我们初学者一般会这样定义:
如写一个数组遍历打印时会这么写:
void print(int a[10],int length)
{
int i=0;
for(i=0;i<length;i++)
{
printf("%d ",a[i]);
}
}

int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
print(a,10);
return 0;

}
然而,当我们对数组有了更深一层的理解之后,即数组可以用指针来表示:
void print(int *a,int length)
{
int i=0;
for(i=0;i<length;i++)
{
printf("%d ",a[i]);
}
}

int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
print(a,10);
return 0;
}

那么,对数组在内存中的存储方式又是怎么样的呢?对此,我又学到了这样一种方式:
int main()
{
int a[10];
printf("a:%d a+1:%d &a:%d &a+1:%d \n",a,a+1,&a,&a+1);
return 0;
}

运行结果:
a:1505832 a+1:1505836 &a:1505832 &a+1:1505872

对运行结果进行一些个人见解:
为什么a和&a的值会一样?而 a+1 和 &a+1 的是不一样?
我的理解是:a 表示的是数组元素中第一个元素的地址,而 &a 则表示的是整个数组a[10]的地址.

a+1 表示数组元素第二个元素的地址,而 &a+1 则是在数组a[10]的地址之后再 "+1"
以上是一个C语言初学者在数组方面的一些浅见,如果有什么写的不对的地方,请各位大牛留言.以后想到什么还会修改.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 数组 指针