日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言数组、字符与字符串笔记

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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'空字符。
字符數組未初始化舉例:

int main(void) {int i=0;char str[4]; //未初始化for (;i<4;i++){printf("%c",str[i]);printf("1");}return 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(即空指針,推薦這樣對其初始化),之后要使用該指針之前還需對其賦值。

int *pa=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语言数组、字符与字符串笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。