数组
定义:就是一个集合,里面存放的是相同类型的数据元素
数组之间的地址是连续的
数组名的定义
- 数据类型+数组名+元素个数
`
int score [10] //数组名score,数组中存放最多10个元素,每个数据的数据类型为int
score [1] =100;
score [2] = 90;
score [3] = 80;
printf("%d\n", score[0]);
printf("%d\n", score[1]);
printf("%d\n", score[2]);
`
- 数组名[元素个数] = {值1 ,值2 ,值3...}
//int score2[10] = { 0,1,2,3,4,5,6,7,8,9 };
//部分初始化数组
//int score2[10] = { 0,1,2,3,4,5 }; //不足的10个数据,剩余的位置用0填充
`
int score2[10] = { [1] = 10,[5] = 50,[9] = 90 };
for (int i = 0; i < 10; i++)
{
printf("%d\n", score2[i]);
}
`
-
数据类型 数组名[] = {值1,值2,值3...}
int score3[] = { 0,1,2,3,4,5,6,7,8,9 };
一维数组
一维数组是一组相同类型的元素的线性集合。这些元素在内存中是连续存储的,可以通过索引(通常是整数)来访问每个元素。
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //一个int占4字节
//1.统计整个数组占用内存的大小
printf("sizeof arr = %d\n", sizeof(arr));
printf("每个数据占用空间大小=%d\n", sizeof(arr[0]));
printf("数组中元素个数=%d\n", sizeof(arr) / sizeof(arr[0]));
//2.通过数组的名称,可以获取到数组的首地址
printf("数组的首地址为:%p\n",arr); //%p可以用十六进制显示地址 %d用十进制显示
printf("第一个元素的地址:%d\n", &arr[0]); //首地址的值与第一个元素的值是一样的 第一个与第二个元素的值差4个字节
//数组名是常量,不可以赋值
//arr = 100; 不可以给数组名赋值
二维数组
二维数组是一组相同类型的元素的矩形集合。这些元素在内存中也是连续存储的,可以通过两个索引(行索引和列索引)来访问每个元素。
int scores[3][3] =
{
{100,100,100},
{90,50,80},
{60,70,80},
};
int row = sizeof(scores) / sizeof(scores[0]); //row代表行
int col = sizeof(scores[0]) / sizeof(scores[0][0]); //col代表列
for (int i = 0; i < row; i++)
{
int sum = 0;
for (int j = 0; j < col; j++)
{
sum += scores[i][j];
}
printf("第%d个同学总分为%d\n", i + 1,sum);
}
字符数组
下列分别介绍了字符数组定义方式 操作字符数组 字符数组的输入输出等
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//字符数组定义方式
void test01()
{
char ch[5];
printf("%d\n", sizeof(ch));
}
//操作字符数组
void test02()
{
//逐个初始化字符数组
//char arr[5] = { 'h','e','l','l','0' }; //error 因为没有\0的位置 输出乱码
//char arr[6]={'h','e','l','l','o'} //\0的本质就是0
char arr[6] = "hello"; //自动在字符串后加\0
/*for (int i = 0; i < sizeof(arr) / sizeof(char);i++)
{
printf("%c", arr[i]);
}
printf("\n");*/
printf("%s\n", arr);
}
void test03()
{
char arr1[32] = "hello world";
printf("%d\n", strlen(arr1)); //strlen 统计字符个数 不统计\0
printf("%d\n", sizeof(arr1)); //sizezof 统计整个数组占用内存的大小
char arr2[] = "hello world";
printf("%d\n", strlen(arr2)); //11
printf("%d\n", sizeof(arr2)); //12
char arr3[] = "hello\0world";
printf("%d\n", strlen(arr3)); //5 统计到\0结束
printf("%d\n", sizeof(arr3)); //12
}
//字符数组的输入
void test04()
{
char arr1[16] = ""; //char arr1 [16] = {0}
scanf("%s", arr1); //输入空格直接结束
printf("%s\n", arr1);
//arr1 ="hello world"; error 不可以直接等号赋值
strcpy(arr1, "hello world"); //string.h
printf("%s\n", arr1);
}
//gets不推荐
void test05()
{
char arr[16] = { 0 };
gets(arr); //遇到换行符才结束 可以输入空格
//不会检查程序是否溢出,一旦溢出,程序停止
printf("%s\n", arr);
}
//fgets推荐
void test06()
{
char arr[16] = { 0 };
fgets(arr, sizeof(arr), stdin); //stdin标准的输入设备,默认代表键盘
printf("%s\n", arr);
}
//字符串输出 put fputs
void test07()
{
char arr[16] = "hello world";
printf("%s\n", arr); //常用
puts(arr); //自带换行
fputs(arr, stdout); //stdout 代表标准输出设备 默认屏幕 不带换行
}
int main()
{
test02();
system("pause");
return 0;
}