zoukankan      html  css  js  c++  java
  • C语言基础复习:字符,字符数组,字符串,字符指针

    1. 概述

    数据类型是现实世界信息表示基本元素。字符则是基本数据类型之一,与之对应的是数字。
    限于字符的数量,一般字符类型都是单字节存储。
    Linux的shell环境中,shell作为一种弱类型语言,仅存在字符(串)数据类型,需要数字时则会把字符串转换为字符。
    恰是这种单一的弱类型脚本语言设定,赋予shell环境强大的字符和文本处理能力。
    本篇则主要介绍C语言种有关字符的知识点。

    2. 字符

    2.1 字符定义和大小

    这里的字符,值得肯定是单个字符,包括普通字符和转义字符。超过一个以上的字符,叫做字符串。
    C语言示例代码如下:

    #include<stdio.h>
    #include<stdint.h>
    int main(){
        printf("char size is : %d
    ",sizeof(char));
        printf("char max is:%d,min is:%d
    ",INT8_MAX,INT8_MIN);
        printf("unsigned char max is:%d
    ",UINT8_MAX);
        return 0;
    }

    输出结果为:

    char size is : 1
    char max is:127,min is:-128
    unsigned char max is:255

    2.2 字符的输入和输出

    C语言示例代码如下:

    #include<stdio.h>
    #include<stdint.h>
    int main(){
        //编译器分配
        char a = 'A';
        printf("%c
    ",a);
        //标准输入输入
        printf("input your char:
    ");
        a = getchar();
        printf("your have input:");
        putchar(a);
        printf("
    ");
        return 0;
    }

    输出结果:

    A
    input your char:
    B
    your have input:B

    2.3 字符的计算

    字符的计算,以字符对应的数字为计算元素
    C语言示例代码如下:

    #include<stdio.h>
    int main(){
        //算术运算
        char a = 'A';
        char b = 'Z';
        printf("%c,%d %c,%d
    ",a,a,a+1,a+1);
        if ( b > a )
            printf("%c(%d) > %c(%d)
    ",b,b,a,a);
        else
            printf("%c(%d) < %c(%d)
    ",b,b,a,a);
        return 0;
     }

    输出结果为:

    A,65 B,66
    Z(90) > A(65)

    3. 字符数组

    字符数组跟整型数组一样定义和使用。
    字符数组输出时,通过格式化输出,即可以输出单个字符,也可以输出字符串。
    C语言示例代码如下:

    3.1 字符数组的定义和大小

    #include<stdio.h>
    #define NAME "liwanliang"
    int main(){
        int i = 0;
        //第1种方式:用数组原始方式初始化字符数组
        char name1[] = {'l','i','w','l'};
        printf("%d
    ",sizeof(name1));
        for ( i = 0; i < sizeof(name1); i++ )
        {
            printf("[%c]",name1[i]);
        }
        printf("
    ");
        //第2种方式:用字符串初始化字符数组
        char name2[sizeof(NAME)] = NAME;
        printf("%d
    ",sizeof(NAME));
        for ( i = 0; i < sizeof(NAME); i++ )
        {
            printf("[%c]",name2[i]);
        }
        printf("
    ");
        return 0;
    }

    输出结果如下:

    4
    [l][i][w][l]
    11
    [l] [i] [w] [a] [n] [l] [i] [a] [n] [g] []

    注意以下代码的区别:

    #include<stdio.h>
    #include<string.h>
    int main(){
        int i = 0;
        char a[5] = "hello";
        char b[8] = "hello";
        printf("sizeof(a):%d,strlen(a):%d
    ",sizeof(a),strlen(a));
        printf("sizeof(b):%d,strlen(b):%d
    ",sizeof(b),strlen(b));
        for ( i = 0; i < 5; i++ )
        {
            printf("[%c]",a[i]);
        }
        for ( i = 0; i < 8; i++ )
        {
            printf("[%c]",b[i]);
        }
        printf("%s
    ",a);
        printf("%s
    ",b);
    }

    输出结果为:

    sizeof(a):5,strlen(a):6
    sizeof(b):8,strlen(b):5
    [h][e][l][l][o][h][e][l][l][o][][][]hello
    hello

    3.2 字符数组的输入和输出

    字符数组的输入,可以如3.1部分定义种讲述的通过编译器分配,也存在其他输入方式:

    1. 函数传递
    2. 文件输入
    3. 网络输入

    C语言示例代码如下:

    //以下仅仅是一个简单的输入字符存入字符数组的情况,程序逻辑性脆弱,仅作示例
    #include<stdio.h>
    #define N 10
    int main(){
        int i = 0;
        char name[N];
        do
        {
            name[i] = getchar();
            i++;
        }while( '
    ' == getchar() && i < 10);
        for ( i = 0; i < sizeof(name); i++ )
        {
            printf("%c",name[i]);
        }
        printf("
    ");
        return 0;
    }

    3.3 字符数组的计算

    字符的计算包括算术计算和逻辑计算。
    以下是一个对字符数组进行排序的C语言示例代码:

    4. 字符串

    4.1 字符串的定义和大小

    C语言示例代码如下:

    #include<stdio.h>
    #include<string.h>
    int main(){
        //第1种方式:以字符数组打印字符串
        char name[] = "liwanliang";
        int i = 0;
        //for ( i = 0; i < strlen(name); i++ )
        for ( i = 0; i < sizeof(name); i++ )
        {
            printf("%c",name[i]);
        }
        printf("
    ");
        printf("my name is:%s
    ",name);
        //第2种方式:以字符指针的方式打印
        char *name1 = "liwanliang";
        printf("my name is:%s
    ",name1);
        return 0;
    }

    输出结果如下:

    liwanliang
    my name is:liwanliang
    my name is:liwanliang

    4.2 字符串的输入和输出

    4.3 字符串的计算

    5 字符指针

    一言以蔽之,指针就是数据类型(内存大小)的内存地址,用指针运算(取址,赋值)来操作内存。
    内存地址同样以变量的形式存放,故名曰指针变量。
    指针是变量说法不准确,指针是存放内存地址的变量。
    因为变量有只读变量(常量的一种表现形式),故指针有指针常量。

    5.1 指向字符的指针

    字符指针,就是指向字符的指针不准确。
    字符指针,可以指向字符,字符数组,或者字符串。因为字符指针,是指向字符型内存区域的指针。
    本部分探讨指向单一字符的指针。
    C语言示例代码如下:

    #include<stdio.h>
    int main(){
        char a = 'a';
        //p需要用char型指针初始化
        char *p = &a;
        printf("input your char:
    ");
        *p = getchar();
        printf("you have input char:");
        putchar(*p);
        printf("
    ");
        //printf("%c
    ",*p);
        return 0;
    }

    输出结果如下:

    input your char:
    A
    you have input char:A

    5.2 指向字符数组的指针

    5.3 指向字符串的指针

    6. 二维字符数组

    6.1 纯数组表示

    C语言代码如下:

    #include<stdio.h>
    int main(){
        char name1[3][5]={{'l','i',},{'w','a','n',},{'l','i','a','n','g'}};
        int i,j = 0;
        for ( i = 0; i < 3; i++ )
        {
            for ( j = 0; j < 5; j++ )
            {
                printf("%c",name1[i][j]);
            }
            printf(" ");
        }
        printf("
    ");
        char name2[3][5]={ "li","wan","liang"};
        for ( i = 0; i < 3; i++ )
        {
            printf("%s ",name2[i]);
        }
        printf("
    ");
    }

    输出结果如下:

    li wan liang
    li wan liang

    6.2 字符指针表示

    C语言示例代码如下:

  • 相关阅读:
    【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理 状态压缩dp+背包dp
    【bzoj1231】[Usaco2008 Nov]mixup2 混乱的奶牛 状态压缩dp
    ContentPresenter元素
    ContentControl和ContentPresenter的应用
    ItemsControl的应用
    ItemsControl的ItemContainerStyle属性
    WPF:理解TileBrush(ImageBrush,DrawingBrush和VisualBrush)
    Stretch的Uniform和UniformToFill
    VisualBrush
    关于.net4.0中的Action委托
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/9538022.html
Copyright © 2011-2022 走看看