C语言学习(一)——数组

一、一维数组

1、定义

【存储类型】 数据类型 标识符
例子:

int i;
int arr[i];
int arr[12];

数组可以是变常数组或者非变常数组

2、初始化

1)可以不进行初始化 如:int arr[10];
2)也可进行全部初始化 如: int arr[2] = {1,2};
3)或者部分初始化:int arr[3] = {1};
  初始化的时候,把数组放置到静态区static中,所有元素都是0。

3、元素引用

单凭数组来引用
引用格式:数组名 + 下标; 如arr[1] – > 表示访问数组第一个元素。

4、注意点

(1)数组名是常量,不可以放在等号左边
(2)注意数组越界问题。

5、一维数组练习题

一维数组练习题,点击此处进入!!!!

二、二维数组

1、定义、初始化

表格有横列纵列,有行列区分
定义时:
[存储类型] + [数据类型] + [标识符][行下标][列下标]

#define M 2
#define N 3
int a[M][N]		// 两行三列的矩阵
// 部分初始化
int a[M][N] = {
    
    {
    
    1, 2, 3}};
int a[M][N] = {
    
    {
    
    1, 3}, {
    
    4}};
int a[M][N] = {
    
    1, 3, 4, 5, 7};

2、元素引用

数组名 [行标] [列标]

3、存储格式

二维数组中,行可以被省略,但是列号不可以被省略
因为在二维数组中,数据顺序存储,并按行存储。

扫描二维码关注公众号,回复: 14683625 查看本文章
a[][3] = {
    
    {
    
    }, {
    
    }};
a[][2] = {
    
    1, 2, 3, 4}				// 两行两列

在内存中,先存放行,再存放列。以行为单位。

4、对二维数组的深入理解

(1)数组名是表示地址的常量
(2)int a[2][3] 可以被看做是a[2],里边都是一维数组,a[0]和a[1]都是由三个整形元素组成。

a[0]  --> a[0][1]   a[0][1]   a[0][2]
a[1]  --> a[1][1]   a[1][1]   a[1][2]

(3)二维数组中a + 1,是跳转了一个一维数组(一行)
a[2]被看做是数组有两个元素,每个元素存放了3个整型数。
(4)数组名是表示地址的常量,不可以放在等号左边

*(*(a+1) + 1) = a[1][1]	// 第一行一列的元素
*(a+1) = a[1]				// 第一行的全部元素

5、例子

(1)行列互换
(2)求二维数组中最大值及其所在位置
(3)求二维数组中各行和各列的和
(4)矩阵乘积

三、字符数组

使用方法与一维和二维数组大致一致。

1、定义、初始化和存储特点

[存储类型] [数据类型] [标识符] [下标]
(1)单个字符初始化 , 如:

char str[N] = {
     
     'a', 'b', 'c'};

(2)用字符串常量初始化

char str[N] = "hello, world!"

(3)字符数组与一维数组的主要区别是,其末尾还有一个’\0’。
如"hello" --> ‘h’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’

2、输入输出

char str[32];
scanf("%s", str);

  输入hello,输出hello。输入hello world,输出也是hello,因为被空格隔断了。

3、常用函数

(1)strlen & sizeof

char str[32] = "hello\0abc";
len_str = strlen(str);
len_size = sizeof(str);

  得到的len_str是9, len_size是32。因为strlen是以\0为结束标记,sizeof标志字符串在内存中真正占用的长度大小。
(2)strcpy & strncpy
用于给字符串赋值,因为数组名是常量,不可以直接赋值。

strcpy(dst, "abcde"); // 以\n为隔断
strncpy(dst, src, size_t n)
strncpy(str, "abcde", STRSIZE);

(3)strcat & strncat
用于将两个字符串拼接为一个字符串。

str = "hello";
strcat(str, "world");  

  strcat 会把str后的\0拿掉,放入"world",并添上新的\0,此过程必须保证str足够大,大到可以容纳str + "world"个字符
(4)strcmp & strncmp
strcmp用于比较字符串。

strcmp("hello", "world") < 0
strcmp("hello", "apple") > 0
strcmp("hello", "hello" ) == 0
strcmp("hello", "helloa") < 0
strncmp("hello", "helloapple", 5) == 0

4、例子

(1)单词计数:如hello是一个词,hello world tree是三个词
(2)不使用库函数,实现strlen、strcpy、strcat、strcmp。

四、多维数组

 int [1][2][3][4][5][6][7][8][9][10][11]

总结

1、一维数组 (概念)(注意点)(例子)

2、二维数组 (概念)(注意点)(例子)

3、字符数组 (概念)(注意点)(例子)

学习道阻且长,必能苦尽甘来,加油!!!

猜你喜欢

转载自blog.csdn.net/weixin_44463519/article/details/126777423