C语言-数组

文章详细介绍了数组的概念,包括一维数组和二维数组的定义、初始化方法以及在内存中的存储方式。强调了数组名的特殊性,它在某些情况下代表数组首元素的地址。此外,讨论了数组作为函数参数时的行为,指出只能传递数组首元素的地址,且函数内部无法直接获取数组大小,需额外传递元素个数。
摘要由CSDN通过智能技术生成

目录

一维数组

二维数组

 数组名

数组作为函数的参数传递


 数组:一组相同类型数据的集合。

数组的定义其实就是开辟一串连续的,相同大小的空间。

一维数组

定义:int arry[10];

初始化:int arry[10]={1,2,3,4,5};

              int arry[]={1,2,3,4,5};

              int arry[10]={1};//初始化第0个元素为1,剩下的以0填充

              int arry[10]={0};

访问:数组中的元素是根据下标访问的,从0开始。

int arry[10]={1};

arry[10]是越界访问,arry数组中的元素为arry[0]~arry[9]。

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int arry[10];
    for (int i = 0; i < 10; i++)
    {
        printf("%p\n", &arry[i]);
        //&arry[i])获取数组第i个元素所在空间的地址并使用%p进行打印
    }
    system("pause");
    return 0;
}

由此可见,arry数组中每个元素占int 大小(4个字节)的空间。

存储:定义了一个数组其实就是开辟了一传连续的内存空间。即数组中的数据在内存中是连续存储的。

二维数组

定义:arry[3][5];

arry数组有三个元素,每个元素也是一个数组,这个数组中也有5个元素。所以arry数组一共有15个元素。

初始化:int arry[2][3]={{1,2,3},{4,5,6}};

              int arry[2][3]={0};//数组中第0个元素为0,其余元素以0填充。

              int arry[][3]={{1,2,3},{4,5,6}};

              int arry[][3]={1,2,3,4,5,6};

注意:二维数组存储时,“行”可以为空,但是“列”不能为空。

存储:二维数组在内存中的存储也是连续的。

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int arry[][3] = { 1, 2, 3, 4, 5, 6 };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 2; j++)
		printf("%p\n", &arry[i][j]);
	}
	system("pause");
	return 0;
}

 

 数组名

数组名在使用的时候,可以代表数组首元素的地址,但是不能代表数组的地址。

 但是有两个比较特殊的地方使用的时候不一样。

int arry[10];

1.sizeof(arry) 得到的是数组所占空间大小,而并非指针大小。

2.&arry是对arry数组取地址,而不是对数组首元素取地址。

在以上两种情况下,数组名表示的是数组,在其他情况下,数组名表示数组首元素的地址。

数组作为函数的参数传递

 int arry[10];

func(arry);   //此时,传递的不是数组,而是数组首元素的地址。

void func(int *arry){    //数组作为参数传递时,传递的都是地址。

}

形参时一个指针变量, sizeof(arry)求的是指针的大小为4。

数组作为函数的参数在传递时,在函数内是无法获取数组的元素个数的。因此,数组作为参数传递的同时,需要再定义一个参数,用来传递数组元素个数。

#include<stdio.h>
#include<stdlib.h>
void print_arry(int *arry,int sz)
{
	for (int i = 0; i < sz; i++)
	{
		printf("%d\n", arry[i]);
	}
}
int main()
{
	int arry[5] = { 1, 2, 3, 4, 5 };
	int sz =sizeof(arry) / sizeof(arry[0]);
	print_arry(arry,sz);
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值