零基础C语言学习

               *c语言学习笔记(十四)*

本节内容:数组
一、一维数组的创建和初始化
1、数组的含义:数组是一组相同类型的元素的集合;
2、数组的创建方式:
int(类型)arr(名称)[20(元素个数,需要是常量表达式)];
所以数组可以是整型也可以是其他类型的。
3、数组不完全初始化时,其余的空位默认为0;另外字符型的数组初始化时,也可以使用字符串型形式初始化,系统会自动按顺序存储字符;还可以利用ASCII值来代替对应字符;

char arr[] = "abcde";
printf("%d ", sizeof(arr));
printf("%d ", strlen(arr));

关于上面的三行代码,问最后执行的结果为多少:答案为6 、 5
这里解释下为什么会出现这样的结果:首先sizeof的作用为计算arr数组的长度,这里是字符串,因此最后一个隐藏字符为\0,而strlen()是用来计算字符串长度,不包括\0,,所以结果如上。
注:当以字符串形式来初始化数组时,结尾会包含\0,而用单个字符来初始化时,则不会包含;但是以单个字符初始化,必须事先指明数组包含字符的具体个数;
二、一维数组在内存中的存储
为了研究数组在内存中的存储方式,我们要查看数组内内容在内存中的存储地址

char arr[] = "abcde";
int i = 0;

for (i = 0; i < 5; i++)
{
	printf("arr[%d]:%p \n", i, &arr[i]);
}   

利用上面的代码查看数组存放的地址
输出结果为:
在这里插入图片描述
我们发现每个数组元素存放的地址都是连续的;故数组在内存中是连续存放的。
三、二维数组的创建与使用
1、二维数组的创建方式,假定创建一个int型的二维数组:
首先给出一个思想,因为二维数组一定会是一种矩阵类型的,而不是说单独的两个一维数组:

int arr[3][4];

这里的意思就是创建一个三行四列的数组
2、二维数组的初始化方式
为了说明方式,采用调试监控的方法来查看数组的具体情况;
首先给出代码:

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

在这里插入图片描述
我们发现花括号里面的内容被分配给了二维数组的每一行元素,假设元素个数不满足数组列数,那么空余位置全部默认为0;
3、二维数组的使用
当我们想调用二维数组的某一具体值时,用法同一维数组类似,需要注意的一点是:无论几位数组,在计算机中数组的下标都是从0开始的
假设我们想要输出数组的第二行第三个数字,那么应该是"arr[1][2]";
时刻记着减一就好了。
下面我们试着打印出来我们定义的二维数组的每一位,我用换行来区分不同行数,这样看起来二维数组更像矩阵(或者行列式,无所谓了)
代码如下:

int arr[3][4] = { {1,2,3,4},{2,3,5,6},{7,8,8,9} };
int i = 0;
int j = 0;
printf("自定义数组为:\n");
for (i = 0; i < 3; i++)
{
	
	for (j = 0; j < 4; j++)
	{
		printf("%d ", arr[i][j]);
	}
	printf("\n");

}

使用for循环嵌套,换行的原理就是在行数+1时,额外输出一个换行符;
结果如下:
在这里插入图片描述
在代码中修改,创建一个指针变量,我们试着输出二维数组的存储地址:

int* pa = &arr[i][j];
printf("%p ", pa);

输出结果:在这里插入图片描述
我们发现二维数组在内存中也是连续存储的。跟一维数组一样,在内存中并没有特殊标记。那么怎么区分一维二维数组呢,我们可以把二维数组想象成n个一维数组,n是二维数组的行数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值