C语言数组、字符与字符串笔记
數組/字符/字符串
- 數組
- 一維數組的定義
- 一維數組的初始化
- 字符串
- 字符數組
- 字符數組的初始化
- 1.使用字符常量的初始化列表對數組初始化
- 2.使用字符串常量直接對數組初始化
- 字符指針
- 指針
- 字符指針與字符串
- 字符的輸入和輸出
- 字符的輸入
- 字符的輸出
- 字符串的輸入和輸出
- 字符串的輸入
- scanf()函數
- gets()函數
- 字符串的輸出
數組
一維數組的定義
變量定義:為變量分配空間,還可以為變量指定初始值(即初始化)。
//方法 1 int a[3]={1,2,3}; //方法 2 int a[]={1,2,3}; //方法 3 int a[3]={0}; //全是0的數組 //方法 4 int a[4]={1,2};//后面沒有的數自動補0,該數組內容為1,2,0,0,如果是字符數組則自動補'\0'空字符另外,數組大小最好用宏定義,以便日后修改代碼。
一維數組的初始化
初始化就是給數組賦值,一般在定義數組的時候完成。
未初始化的數組元素值:
- 靜態數組和全局數組自動初始化為 0 。(靜態數組只需在數據類型int之前加static,全局數組只需在main()函數之外定義數組即可,可以自己試一下)
- 其他數組初始化為隨機數。
舉例如下:
int a[3]; for (int i=0;i<3;i++) {printf("%d\n",a[i]); }輸出:
12325808 0 16字符串
C語言字符串特性:字符串以空字符結尾,空字符被寫作\0,其ASCLL為0,用來標記字符串的結尾。
C語言沒有提供專門的字符串數據類型。
表示及處理字符串方法:
- 1.使用字符數組并且數組最后一個元素是'\0'空字符。(注意末尾沒有’\0’的字符數組不能代表字符串)
- 2.使用字符指針。
字符數組
定義:每個元素都是字符類型的數組。
未初始化的字符數組,不論是靜態數組還是動態數組,都自動初始化一個'\0'空字符。
字符數組未初始化舉例:
輸出:
1 1 1 1字符數組的初始化
1.使用字符常量的初始化列表對數組初始化
char str[6]={'s','a','b','e','r','\0'};如果初始化時元素個數小于數組大小,則自動在每個位置補’\0’空字符
2.使用字符串常量直接對數組初始化
//方法1 char str[6]={"saber"}; //方法2 char str[6]="saber"; //方法3 char str[]="saber";另外,數組名表示數組的首地址,即數組第一個元素的地址。且數組名是一個地址常量,不能改。
如:str="saber"是錯誤的,str是地址常量,值為s字符的地址。
字符指針
指針
使用*表示指針類型。
指針表示數據的地址。
定義指針變量:
int *pa; //未初始化上述定義就是告訴編譯器,pa是一個指針變量,需要用一個int型變量的地址給它賦值。
定義指針可以不用初始化,但是使用指針一定要初始化。
如果不知道指針指向哪來,那就指向NULL(即空指針,推薦這樣對其初始化),之后要使用該指針之前還需對其賦值。
字符指針與字符串
字符指針就是指向字符串首地址的指針,也就是字符串第一個字符的地址。
char *pStr="saber";注意:此處可以改變指針pStr的值(也就是指向),但是不能改變指向的內容也就是字符串,因為字符串是一個常量
要想既能改變指針的指向,也能改變指針的值,下面有一種字符指針與指針數組結合的方法:
char str[]="saber"; char *pStr; pStr=str; //等價于pStr=&str[0] *pStr='w';//修改字符串第一個字符,等價于str[0]='w'和 pStr[0]='w'字符的輸入和輸出
最常用的方法都有兩個。
字符的輸入
char ch; //方法 1 ch=getchar(); //只用于輸入字符 //方法 2 scanf("%c",&ch);字符的輸出
char ch; //方法1 putchar(ch) //只用于輸出字符 //方法2 printf("%c",ch);字符串的輸入和輸出
字符串的輸入
有兩種方法:
char str[10]; //方法1 scanf("%s",str); //不推薦使用 //方法2 gets(str); //推薦使用還有一種比較笨的方法,就是遍歷字符數組,逐個位置輸入字符。
scanf()函數
以空白符(空格,回車等)為輸入的停止標志,不能輸入帶空格的字符串。
而且不能讀走空白符,影響后面的輸入。這是scanf()函數十分嚴重的弊端。
不推薦使用這種方法輸入字符串。
下面的代碼就是由于空白符還留在緩沖區的影響:
#include <stdio.h> int main(void) {char c[80];printf("input a string:"); //用戶輸入一個字符串scanf("%s",c);printf("%s\n",c);printf("input a string:"); //用戶輸入一個字符gets(c);printf("%s\n",c);return 0; }shelll輸出:
input a string:saber saber input a string:請按任意鍵繼續. . .ch把scanf()函數的輸入停止標志的空白符(此處為回車)讀取了。
解決辦法有兩個:
- 在scanf()輸入之后加一行getchar();用來接收緩沖區的空白符。
- 在scanf()輸入之后加一行 fflush(stdin);清空輸入緩沖區。
gets()函數
以回車為輸入的停止標志,也就是可以輸入帶空格的字符串,
并且可以讀走緩沖區的回車,只能輸入字符串.
推薦使用這種方法輸入字符串。
下面是gets()函數讀走了回車不影響后續輸入的代碼:
#include <stdio.h> int main(void) {char c[80],ch;printf("input a string:");//用戶輸入一個字符串gets(c);printf("%s\n",c);printf("input a string:");//用戶輸入一個字符ch=getchar();printf("%c\n",ch);return 0; }輸出:
input a string:saber saber input a string:等待用戶輸入ch字符中。
字符串的輸出
char str[10]; //方法1 printf("%s",str); //或者直接用字符串替換str //方法2 puts(str); //自動換行,只能輸入字符串還有一種比較笨的方法,就是遍歷字符數組,逐個位置輸出字符。
本文參考了蘇小紅C程序設計PPT。
總結
以上是生活随笔為你收集整理的C语言数组、字符与字符串笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极路由怎么用手机设置(极路由无线路由器怎
- 下一篇: KMP算法笔记