C语言指针操作(四)通过指针引用字符串
學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。?
學習日記
目錄
學習日記
前言?編輯
一、字符串的引用方式
例1
例2
二、字符指針作函數參數
用函數調用實現字符串的復制。
例1
例2
例3
總結
三、使用字符指針變量和字符數組的比較?
例
?C語言指針操作
前言
????????指針這里分為八個小部分,分別是“指針變量”、“通過指針引用數組”、“*通過指針引用多維數組”、“通過指針引用字符串”、“*指向函數的指針”、“*返回指針值的函數”、“*指針數組和多重指針”、“*動態內存分配與指向它的指針變量” 。?
一、字符串的引用方式
?????????用字符數組存放一個字符串,可以通過數組名和下標引用字符串中一個字符,也可以通過數組名和格式聲明“%s”輸出該字符串。
????????用字符指針變量指向一個字符串常量,通過字符指針變量引用字符串常量。
例1
????????定義一個字符數組,在其中存放字符串″I love China!″,輸出該字符串和第8個字符。?
#include <stdio.h> int main() { char string[]="I love China!"; //定義字符數組stingprintf("%s\n",string); //用%s格式聲明輸出string,可以輸出整個字符串printf("%c\n",string[7]); //用%c格式輸出一個字符數組元素 return 0; }| string | ||
| I | string[0] | |
| string[1] | ||
| l | string[2] | |
| o | string[3] | |
| v | string[4] | |
| e | string[5] | |
| string[6] | ||
| string(7) | C | string[7] |
| h | string[8] | |
| i | string[9] | |
| n | string[10] | |
| a | string[11] | |
| ! | string[12] | |
| \0 | string[13] |
????????在C語言中只有字符變量,沒有字符串變量。string被定義為一個指針變量,基類型為字符型。它只能指向一個字符類型數據,而不能同時指向多個字符數據。
????????可以通過字符指針變量輸出它所指向的字符串
printf(″%s\n″,string); //%s可對字符串進行整體的輸入輸出????????%s是輸出字符串時所用的格式符,在輸出項中給出字符指針變量名string,則系統會輸出string所指向的字符串第1個字符,然后自動使string加1,使之指向下一個字符,再輸出該字符……如此直到遇到字符串結束標志′\0′為止。
????????注意,在內存中,字符串的最后被自動加了一個′\0′。?
對字符串中字符的存取,可以用下標方法,也可以用指針方法。?
例2
????????將字符串a復制為字符串b,然后輸出字符串b。用指針變量來處理。
#include <stdio.h> int main() { char a[]="I am a boy.",b[20],*p1,*p2;p1=a;p2=b;//p1,p2分別指向a數組和b數組中的第一個元素for(;*p1!='\0';p1++,p2++) //p1,p2每次自加1*p2=*p1;//將p1所指向的元素的值賦給p2所指向的元素*p2='\0'; //在復制完全部有效字符后加'\0'printf("string a is:%s\n",a); //輸出a數組中的字符printf("string b is:%s\n",b); //輸出b數組中的字符return 0; }二、字符指針作函數參數
用函數調用實現字符串的復制。
例1
????????用字符數組名作為函數參數
#include <stdio.h> int main() { void copy_string(char from[], char to[]);char a[]="I am a teacher.";char b[]="You are a student.";printf("string a=%s\nstring b=%s\n",a,b);printf("copy string a to string b:\n");copy_string(a,b); //用字符數組名作為函數實參printf("\nstring a=%s\nstring b=%s\n",a,b);return 0; }void copy_string(char from[], char to[]) //形參為字符數組 { int i=0;while(from[i]!='\0'){ to[i]=from[i]; i++;}to[i]='\0'; }例2
????????用字符型指針變量作實參
#include <stdio.h> int main() { void copy_string(char from[], char to[]); //函數聲明char a[]="I am a teacher."; //定義字符數組a并初始化char b[]="You are a student."; //定義字符數組b并初始化char *from=a,*to=b; //from指向a數組首元素,to指向b數組首元素 printf("string a=%s\nstring b=%s\n",a,b);printf("copy string a to string b:\n");copy_string(from,to); //實參為字符指針變量printf("\nstring a=%s\nstring b=%s\n",a,b);return 0; } void copy_string(char from[], char to[]) //形參為字符數組 { int i=0;while(from[i]!='\0'){ to[i]=from[i]; i++;}to[i]='\0'; }例3
????????用字符指針變量作形參和實參
#include <stdio.h> int main() { void copy_string(char *from, char *to);char *a="I am a teacher."; //a是char*型指針變量char b[]="You are a student."; //b是字符數組char *p=b; //使指針變量p指向b數組首元素printf("string a=%s\nstring b=%s\n",a,b); //輸出a串和b串printf("copy string a to string b:\n");copy_string(a,p); //調用copy_string函數,實參為指針變量printf("\nstring a=%s\nstring b=%s\n",a,b); //輸出改變后的a串和b串return 0; } void copy_string(char *from, char *to) //定義函數,形參為字符指針變量 { for(;*from!='\0';from++,to++){ *to=*from;}*to='\0'; }總結
????????字符指針作為函數參數時,實參與形參的類型有以下幾種對應關系:
| 實參 | 形參 |
| 字符數組名 | 字符數組名 |
| 字符數組名 | 字符指針變量 |
| 字符指針變量 | 字符指針變量 |
| 字符指針變量 | 字符數組名 |
三、使用字符指針變量和字符數組的比較?
????????字符數組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是地址(字符串第1個字符的地址),絕不是將字符串放到字符指針變量中。
????????賦值方式:可以對字符指針變量賦值,但不能對數組名賦值。(數組名是常量)?
初始化的含義
char *a="I love China!";======char *a;?? ? a=″I love China!″;?
????????存儲單元的內容。編譯時為字符數組分配若干存儲單元,以存放各元素的值,而對字符指針變量,只分配一個存儲單元(Visual C++為指針變量分配4個字節)。?
char *a,str[10]; a=str; scanf("%s",a);????????指針變量的值是可以改變的,而字符數組名代表一個固定的值(數組首元素的地址),不能改變。?
????????字符數組中各元素的值是可以改變的(可以對它們再賦值),但字符指針變量指向的字符串常量中的內容是不可以被取代的(不能對它們再賦值)。
char a[]="House"; a[2]='r';????????引用數組元素。對字符數組可以用下標法(用數組名和下標)引用一個數組元素(如a[5]),也可以用地址法(如*(a+5))引用數組元素a[5]。如果定義了字符指針變量p,并使它指向數組a的首元素,則可以用指針變量帶下標的形式引用數組元素(如p[5]),同樣,可以用地址法(如*(p+5))引用數組元素a[5]。?
????????用指針變量指向一個格式字符串,可以用它代替printf函數中的格式字符串。
char *format="a=%d,b=%f\n"; printf(format,a,b);例
????????改變指針變量的值。?
#include <stdio.h> int main() { char *a="I love China!";a=a+7; //改變指針變量的值,即改變指針變量的指向printf("%s\n",a); //輸出從a指向的字符開始的字符串return 0; }????????指針變量的值是可以改變的,而字符數組名代表一個固定的值(數組首元素的地址),不能改變。
????????指針變量a的值是可以變化的。printf函數輸出字符串時,從指針變量a當時所指向的元素開始,逐個輸出各個字符,直到遇'\0'為止。而數組名雖然代表地址,但它是常量,它的值是不能改變的。?
?C語言指針操作
C語言指針操作(一)指針變量
C語言指針操作(二)通過指針引用數組
C語言指針操作(三)*通過指針引用多維數組?
C語言指針操作(四)通過指針引用字符串
C語言指針操作(五)*指向函數的指針
C語言指針操作(六)*返回指針值的函數?
C語言指針操作(七)*指針數組和多重指針?
C語言指針操作(八)*動態內存分配與指向它的指針變量?
總結
以上是生活随笔為你收集整理的C语言指针操作(四)通过指针引用字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多谐振荡器
- 下一篇: 研发中心居家隔离制度,疫情常态化期间,既