黑马程序员 C语言 - 06 数组、二维数组、字符串

若排版有错误,请查看PDF版:C语言 - 06 数组、二维数组、字符串.pdf



第十一章 数组

一、  定义

元素类型 数组名[元素个数]

1.       元素个数必须是常量,或者不写

2.       只能在定义数组的同时进行初始化

3.       数组的长度:

sizeof(ages)/sizeof(int)

4.       数组名是数组的地址

 

int ages[5] = {19,29, 28, 27, 26};

地址:0~4

 

二、  使用注意

1.     正确写法

int ages[5] = {19,29, 28, 27, 26};

int ages[5] = {10,11};

int ages[5] = {[3] =10, [4] = 11};

int ages[] = {19,29, 28, 27, 26};

int ages['A'-50] = {10,11, 12, 14, 16};

 

    int count = 5;

    int ages[count];

    ages[0] = 10;

    ages[1] = 11;

 ages[2] = 18;

 

2.     错误写法

int ages[];

 

// 只能在定义数组的同时进行初始化

int ages[5];

ages = {10, 11, 12, 14};

 

// 如果想再定义数组的同事进行初始化,数组元素个数必须是常量,或者不写

int ages[count] = {10,11, 12};

 

3.     数组与函数

1)     数组作为函数参数,可以省略元素个数

2)     数组作为函数参数,传递的是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组

 

void change(int array[])

{

    array[0] = 100;

}

 

int main()

{

    int ages[6] = {10,11, 10, 11, 10, 11};

    change(ages); // ages[0]==100

    return 0;

}

 

三、  内存分析

1.       存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)

 

2.       数组名是数组的地址

printf("%p\n", ages);

 

四、  练习

1.       设计一个函数:int arrayMax(int a[], int count),找出数组元素的最大值

int maxOfArray(int array[],int length)

{

    // 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据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 main()

{

    int ages[] = {11,90, 67, 150, 78, 60,70, 89, 100};

    int max = maxOfArray(ages,sizeof(ages)/sizeof(int));

    printf("%d\n", max);

    return 0;

}

 

第十二章 二维数组

一、  定义

元素类型 数组名[数组的个数][每个数组的元素数]

二维数组是一个特殊的一维数组,它的元素是一维数组。例如int ages[3][3]可以看作由一维数组ages[0]、ages[1]、ages[2]组成,这三个一维数组都包含了3个int类型的元素

         int ages[3][3]= {

      {10, 11, 90, 89,70},

      {10, 11, 90, 89,70},

      {10, 11, 90, 89,70}

};

 

二、  内存分析


 

第十三章 字符串

一、  什么是字符串

1.       简单的字符串”itcast”

2.       一个’i’是一个字符

3.       很多个字符组合在一起就是字符串

 

二、  字符串的初始化

    // \0ASCII码值是0

1.       都是字符串,存储时会在后面存入一个’\0’字符,除非标明的字符数与=号后面的字符数相等

      char name[8] ="it"; // 不等价:char name[2] ="it";

      char name[8] = {'i','t', '\0'};

      char name[8] = {'i','t', 0};

   char name[8] = {'i','t'};

      char name[] = "itcast";

      char name2[] = "it\0cast";

 

2.       不算是一个字符串(只能说是一个字符数组)

              char name3[] = {'0','6'};

   char name5[] = {'i','t'};

 

3.       字符串的输出”%s”,’\0’是不会输出的

 

三、  \0的作用

1.       字符串结束的标记

2.       \0的ASCII码值是0

3.       printf("%s\n", name2);

会从name2这个地址开始输出字符,直到遇到\0为止

printf("%s\n", &name2[1]);// t

 

四、  字符串处理函数

1.     strlen函数

计算字符串长度,声明在string.h文件中。

1)     计算的是字符数,并不是字数。一个汉字算作3个字符

2)     从某个地址开始数字符的个数,直到遇到\0为止

3)     计算的字符不包括\0

 

    #include <string.h>

    char name[] = "itcast"; // 长度:6

    char name2[] = "it\0cast"; // 2

 char name3[] = {'0','6'}; // 4

 


 

五、  字符串数组

char names[2][10]= {"jack","rose"};

    printf("%s\n", names[0]);// jack

    printf("%c\n", names[0][3]);// e

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值