C语言的数组学习

C语言的数组学习

1.数组的基本知识

1.概念:数组是一个或多个相同类型变量的集合。

注意:数组里的元素个数不能为0

2.数组的定义和初始化

定义数组时,定义出了数组的名字,数组的大小和数组元素的类型。

初始化:

int main()
{
	int arr1[5] = { 1, 2, 3, 4, 5 };//完全初始化,类型是int [5]
	int arr2[5] = { 1, 2, 3 };//不完全初始化,类型是
	int arr3[] = { 1, 2, 3 };//以初始化个数为准,3个。
 char arr4[10] = {'0'};//类型是char [10]
    char arr5[] = {"abcdef"};
	return 0;
}

一般初始化都要使用大括号

易错:

#include <string.h>
int main()
{
	char arr1[] = { "abcdef" };//字符串数组,可以不要定义长度,\0其实还有一位,比如此题arr1[6]是\0,可以使用监视窗口。
	char arr2[] = { "ghijkl" };
    return 0;
}

3.数组的类型

int [5],char[10],把数组名去掉就是数组类型了。

2.一维数组

1.[]:下标引用操作符

2.一维数组在内存中的存储方式:数组在内存中是连续存放的,地址是从低到高的。

3.size of和 strlen函数和数组

#include <string.h>
int main()
{
	char arr[] = "Hello Bit";
	printf("%zd\n", sizeof(arr));//10
	printf("%zd\n", strlen(arr));//9
	char acX[] = "abcdefg";
	char acY[] = { 'a','b','c','d','e','f','g' };
	printf("%zd\n", strlen(acX));//7
	printf("%zd\n", strlen(acY));//没有\0,随机值
	printf("%zd\n", sizeof(acX));//7
	printf("%zd\n", sizeof(acY));//8,逗号不要算!!!
	return 0;
}

二维数组

1.二维数组的创建

初始化时行可以为0,但是列不能为0

#include <stdio.h>
int main()
{
    int arr[m][n] = { 0 };
    return 0;//m为横,n为列
}

二维数组在内存中一样是连续存放的。

3. 变长数组

1.变长是指以变量为数组长度

2.C99之后允许使用变量来作为数组的长度,但是VS不可以。

3.**变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化。**它的好处是程序员不必在开发时,随意为数组指定⼀个估计的长度,程序可以在运行时为数组分配精确的长度。变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小⼀旦确定就不能再变化了。

4.我是用Dev-C++来编译的

#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	scanf("%d", &i);
	int arr[i];
	for (j = 0; j < i; j++)
	{
		arr[j] = j;
	}
	for (j = 0; j < i; j++)
	{
		printf("%d", arr[j]);
	}
	return 0;
}
//输入10
//输出0-9

4.数组的典型题

//多个字符从两边移动,向中间汇聚
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
    char arr1[] = { "***************"};
    char arr2[] = { "Welcome to bit!" };
    int left = 0;
    int right = strlen(arr2) - 1;
    while (left <= right)
    {
        printf("%s\n", arr1);
        Sleep(1000);//休眠,单位是毫秒
            system("cls");//清屏
        arr1[left] = arr2[left];
        arr1[right] = arr2[right];
        left++;
        right--;
    }
    printf("%s\n", arr1);
    return 0;
}
int main()//杨辉三角形直角三角形版
{
	int i = 0, j = 0, n;
	int arr[100][100] = { 0 };
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < i + 1 ; j++)
		{
			if ((0 == j) || (i == j))
			{
				arr[i][j] = 1;
				//printf("%d ", arr[i][j]);
			}
			else
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
				//printf("%d ", arr[i][j]);
			}
			printf("%d ",arr[i][j]);//优化一点点
		}
		printf("\n");
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值