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;
}