數據類型是現實世界信息表示基本元素。字符則是基本數據類型之一,與之對應的是數字。
限於字符的數量,通常字符類型都是單字節存儲。
Linux的shell環境中,shell做爲一種弱類型語言,僅存在字符(串)數據類型,須要數字時則會把字符串轉換爲字符。
恰是這種單一的弱類型腳本語言設定,賦予shell環境強大的字符和文本處理能力。
本篇則主要介紹C語言種有關字符的知識點。shell
這裏的字符,值得確定是單個字符,包括普通字符和轉義字符。超過一個以上的字符,叫作字符串。
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
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
字符的計算,以字符對應的數字爲計算元素
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)
字符數組跟整型數組同樣定義和使用。
字符數組輸出時,經過格式化輸出,便可以輸出單個字符,也能夠輸出字符串。
C語言示例代碼以下:內存
#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.1部分定義種講述的經過編譯器分配,也存在其餘輸入方式:
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; }
字符的計算包括算術計算和邏輯計算。
如下是一個對字符數組進行排序的C語言示例代碼:
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
一言以蔽之,指針就是數據類型(內存大小)的內存地址,用指針運算(取址,賦值)來操做內存。
內存地址一樣以變量的形式存放,故名曰指針變量。
指針是變量說法不許確,指針是存放內存地址的變量。
由於變量有隻讀變量(常量的一種表現形式),故指針有指針常量。
字符指針,就是指向字符的指針不許確。
字符指針,能夠指向字符,字符數組,或者字符串。由於字符指針,是指向字符型內存區域的指針。
本部分探討指向單一字符的指針。
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
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
C語言示例代碼以下: