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

版权声明:文章为博主原创,转载需注明出处 https://blog.csdn.net/qq_37975515/article/details/79490595

第一次写博客文章,有什么不对的地方,请勿见怪.

对函数传递数据的一些体会.当我们定义一个函数的时候,当参数传递的是数组的时候我们初学者一般会这样定义:

如写一个数组遍历打印时会这么写:

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语言初学者在数组方面的一些浅见,如果有什么写的不对的地方,请各位大牛留言.以后想到什么还会修改.

猜你喜欢

转载自blog.csdn.net/qq_37975515/article/details/79490595