C语言笔记——4. 数组&5.常用字符串函数

四、数组

1. 一维数组
  1. 概念:顾名思义,数组:数据的组合,数组元素的数据类型相同,内存连续。

  2. 定义:类型说明符 数组名[数组长度] = {存储的数据},例如:int arr[5] = {1,2,3,4,5}

注:类型说明符即 基本数据类型;

​ 数组名必须是合法的标识符,满足规则和规范;

​ 数组大小:是一个常量,或者是一个字符(ASCII码);

​ 数组通过下标访问,下标从0开始,例如:arr[0],为1;

​ 数据是占内存的,并且操作系统会随机分配内存地址编号;

​ 地址:实际上是内存条上的东西,虚拟出来的一个地址,用来表示这个数据在内存条的位置。地址一般是用十六进制形式表示。

int arr1[]; //错误定义
int arr2[]={1,2,3,4,5};  //正确,初始化的元素个数即arr2数组大小
int arr3[10]={1,2,3};  //正确,输出1230000000
int arr[10] = {1,2,3,4,5,6,7,8,9,10};  //正确
printf("%d\n", arr[4]);  //5
scanf("%d",&arr[4]); //因为arr也是变量,所以可以改变,这里输入55
printf("%d\n", arr[4]);

//打印数组数据
for(int i=0; i<10; i++)
{
    printf("%d\n",arr[i]);
}
//打印内存地址,地址连续
for(int i=0; i<10; i++)
    printf("%p\n", &arr[i]);
2. 二维数组
  1. 概念

    类似一维数组。

  2. 定义

    类型说明符 数组名[行数组长度] [列数组长度] = {{存储的数据},{存储的数据}}

    //例如,arr1和arr2存储方式相同,但为了好观察,一般采用arr1的方式。
    //赋值是一行一行地赋值
    int arr1[2][3]={{1,2,3},{3,2,1}};
    int arr2[2][3]={1,2,3,3,2,1};
    int arr3[2][3]={{1,2},{3,2}}; //没有赋值地地址赋值为0,即1,2,0,3,2,0
    int arr4[][3];  //错误
    int arr5[2][];  //错误
    int arr6[][3]={
        1,2,3,  //第一行123
        3,2  //第二行320
    	};  //正确
    //打印二维数组
    for(int i=0; i<2; i++)
    {
        for(int j=0; j<3; j++)
            printf("%d\t",arr6[i][j]);
    }
    
3. 三维数组

由多个二维数组组成。

int arr1[2][4][3]; //2个二维数组,均为4行3列
//如何赋值嘞?
int arr1[2][4][3] = {
    {
        {1,2,3},
        {4,5,6},
        {7,8,9},
        {10}
    },
    {
        {1,2,3},
        {4,5,6},
        {7,8,9}, //aar1[1][2][2]=9
        {10}
    }
}//打印
for(int i=0; i<2; i++)
{
    for(int j=0; j<4; j++)
    {
        for(int k=0; k<3; k++)
            printf("%d\t",arr1[i][j][k]);
    }
}
4. 四维数组

与上面类似,由多个三维数组组成。

5. 字符数组
  1. 定义:存储字符类型数据地集合。

    char str[10] ={0};
    str[0] = 'a'; //赋值
    str[1] = 'b';
    for(int i=0; i<10; i++)
        printf("%c\n",str[i]); //打印 ab   
    

    注意:字符串和字符不一样

    char str1[10] = "abcdefg";
    printf("%s",str1);  //字符串末尾有\0,指结束字符
    
    char str2[10];
    str2[0] = 'a'; //赋值
    str2[1] = 'b';
    //printf("%s",str2);  //错误,数组结尾没有\0
    str2[2] = '\0';
    str2[3] = 'c';
    printf("%s",str2);  //正确,输出a,b,因为遇到结束符\0
    
  2. 注意输入字符串和输入数字地区别

    scanf("%s", str);
    printf("%s",str);
    //或者用另一种方式
    gets(str);
    puts(str);
    
  3. 中文也是字符,但是一个汉字占两个字节。

  4. 二维字符数组

    char str[3][10]=
    {
        {"张三"}{"李四"}{"王二"}
    }printf("%s",str[0]);//输出第一行 张三
    

五、 常用字符串函数

1. strcmp()

用于比较两个字符串str1,str2,比较完毕后返回一个结果

return 0,表示str1=str2,>0表示str1>str2, <0表示str1<str2.

char str1[10] = "aaaaa";
char str2[10] = "aaaaa";
printf("%d\n", strcmp(str1,str2));//需要头文件<string.h>
2. strlen()

求字符串地有效长度,\0不算有效长度,区别sizeof():求类型大小。

char str[10] = "aaa";
printf("%d\n",strlen(str));//3
3. strcat()

字符串拼接函数。拼接的时候str数组要留够足够的空间。

char str[10] = "aaaa";
char str2[10] = "bbb";
strcat(str, str2);//aaaabbb
printf("%s", str);
4. strcpy()

字符串拷贝函数。

char str[10] = "aaa";
char str1[10] = "bbb";
strcpy(str,str1);
printf("%s\n", str); //bbb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼才的凝视

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值