C語言基礎複習:字符,字符數組,字符串,字符指針

1. 概述

數據類型是現實世界信息表示基本元素。字符則是基本數據類型之一,與之對應的是數字。
限於字符的數量,通常字符類型都是單字節存儲。
Linux的shell環境中,shell做爲一種弱類型語言,僅存在字符(串)數據類型,須要數字時則會把字符串轉換爲字符。
恰是這種單一的弱類型腳本語言設定,賦予shell環境強大的字符和文本處理能力。
本篇則主要介紹C語言種有關字符的知識點。shell

2. 字符

2.1 字符定義和大小

這裏的字符,值得確定是單個字符,包括普通字符和轉義字符。超過一個以上的字符,叫作字符串。
C語言示例代碼以下:數組

#include<stdio.h>
#include<stdint.h>
int main(){
    printf("char size is : %d\n",sizeof(char));
    printf("char max is:%d,min is:%d\n",INT8_MAX,INT8_MIN);
    printf("unsigned char max is:%d\n",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\n",a);
    //標準輸入輸入
    printf("input your char:\n");
    a = getchar();
    printf("your have input:");
    putchar(a);
    printf("\n");
    return 0;
}

輸出結果:指針

A
input your char:
B
your have input:B

2.3 字符的計算

字符的計算,以字符對應的數字爲計算元素
C語言示例代碼以下:code

#include<stdio.h>
int main(){
    //算術運算
    char a = 'A';
    char b = 'Z';
    printf("%c,%d %c,%d\n",a,a,a+1,a+1);
    if ( b > a )
        printf("%c(%d) > %c(%d)\n",b,b,a,a);
    else
        printf("%c(%d) < %c(%d)\n",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\n",sizeof(name1));
    for ( i = 0; i < sizeof(name1); i++ )
    {
        printf("[%c]",name1[i]);
    }
    printf("\n");
    //第2種方式:用字符串初始化字符數組
    char name2[sizeof(NAME)] = NAME;
    printf("%d\n",sizeof(NAME));
    for ( i = 0; i < sizeof(NAME); i++ )
    {
        printf("[%c]",name2[i]);
    }
    printf("\n");
    return 0;
}

輸出結果以下:字符串

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

注意如下代碼的區別:get

#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\n",sizeof(a),strlen(a));
    printf("sizeof(b):%d,strlen(b):%d\n",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\n",a);
    printf("%s\n",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( '\n' == getchar() && i < 10);
    for ( i = 0; i < sizeof(name); i++ )
    {
        printf("%c",name[i]);
    }
    printf("\n");
    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("\n");
    printf("my name is:%s\n",name);
    //第2種方式:以字符指針的方式打印
    char *name1 = "liwanliang";
    printf("my name is:%s\n",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:\n");
    *p = getchar();
    printf("you have input char:");
    putchar(*p);
    printf("\n");
    //printf("%c\n",*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("\n");
    char name2[3][5]={ "li","wan","liang"};
    for ( i = 0; i < 3; i++ )
    {
        printf("%s ",name2[i]);
    }
    printf("\n");
}

輸出結果以下:

li wan liang
li wan liang

6.2 字符指針表示

C語言示例代碼以下:

相關文章
相關標籤/搜索