数组的基本使用
数组的定义格式:
类型 数组名[元素个数];
int ages[5] = {19, 29, 28, 27, 26};
数组的注意事项
存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
数组名的作用,查看元素地址
数组越界的注意
使用注意
正确写法
> int ages[5] = {10 , 11, 12, 67, 56};
> int ages[5] = {10, 11};
> int ages[5] = {[3] = 10, [4] = 11};
> int ages[] = {10, 11, 14};
> int ages['A'-50] = {10, 11, 12, 14, 16};
> /*
int count = 5;
int ages[count];
ages[0] = 10;
ages[1] = 11;
ages[2] = 18;
*/
错误写法
//第一种情况~没有初始化数组个数,并不知道需要分配多少内存空间
int ages[];
//第二种情况只能在定义数组的同时进行初始化
int ages[5];
ages = {10, 11, 12, 14};
//第三种情况 如果想再定义数组的同时进行初始化,数组元素个数必须是常量,或者不写
int count = 5;
int ages[count] = {10, 11, 12};
计算数组元素的个数
int count = sizeof(ages)/sizeof(int);
数组和函数
// 数组作为函数参数,可以省略元素个数
// 数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
void change(int array[])
{
array[0] = 100;
}
//基本数据作为函数参数是值传递
void change2(int n)
{
n = 100;
}
int main()
{
int ages[6] = {10, 11, 10, 11, 10, 11};
change(ages);
change2(ages[0]);
return 0;
}
获取数组中的最大值
int maxOfArray(int array[], int length)
{
// 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
//int size = sizeof(array);
//printf("array=%d\n", size); 得到的是8
// 1.定义一个变量存储最大值(默认就是首元素)
int max = array[0];
// 2.遍历所有元素,找出最大值
for (int i = 1; i<length; i++)
{
// 如果当前元素大于max,就用当前元素覆盖max
if (array[i] > max)
{
max = array[i];
}
}
return max;
}
二维数组
什么是二维数组?
一个数组能表示一个班人的年龄,如果想表示很多班呢?
int ages[3][10]; 三个班,每个班10个人
相当于3行10列
相当于装着3个一维数组
二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
int main()
{
/*
1 浅蓝色
2 深蓝色
3 黄色
4 红色
-1 没有
*/
int cubes[5][5] = {
{1, -1, -1, -1, -1},
{1, 1, -1, 2, -1},
{4, 1, 2, 2, 2},
{4, 3, 3, 3, 3},
{4, 3, 3, 3, 3}
};
return 0;
}
字符串
char name[] = "jackChan";
char name2[8] = {'i', 't', '\0'};
字符串是以 \0为标志的
/*
\0的作用
1.字符串结束的标记
2.printf("%s", name2);
会从name2这个地址开始输出字符,直到遇到\0为止
因为name2只是普通的字符数组,(没有指定分配多少内存空间,就会以字符的个数进行分配存储空间,由于不包含\0,所以是一个普通的字符数组,而printf中%s是字符串,所以会先找到name2的内存地址,"注意:分配内存的时候寻址是先大后小,所以name[]的内存地址比name2的内存地址大",没有\0,会继续向下找到name[]中,直到遇到\0才结束)
*/
int main()
{
char name[] = "itc\0ast";
char name2[] = {'o', 'k'};
printf("%s\n", name2); //输出的结果是okitc
// printf("%s\n", &name2[1]);
return 0;
}
strlen函数
/*
strlen 函数:计算字符串的长度
1 计算的是字符数,并不是字数,一个汉字算作3个字符
2 计算的字符不包含\0
3 从某个地址开始数 字符的个数,直到遇到\0为止
4 strlen 函数声明在string.h中
*/
#include <string.h>
#include <stdio.h>
int main()
{
int size = strlen("哈haha");
printf("%d\n", size);
char name[] = "jack";
printf("%s\n", name); // jack
printf("%c\n", name[3]); // k
return 0;
}
字符串数组
#include <stdio.h>
int main()
{
char name[] = "jack";
char name1[] = "rose";
char name2[] = "jim";
char name3[] = "jake";
char names[2][10]= {"jack", "rose"};
//printf("%s\n", names[0]);
//printf("%c\n", names[0][3]);
char names2[2][10] =
{
{'j', 'a', 'c', 'k', '\0'},
{'r', 'o', 's', 't', '\0'}
};
return 0;
}
网友评论