C語言怎樣用指針指向字符串
字符串的定義和使用
part 1 指針定義字符串
指針定義字符串,輸出它的地址:
#include<stdio.h> int main() { char *s1="Hello World"; char *s2="Hello World"; printf("0x%p\n",s1); printf("0x%p\n",s2); }
這時,出現(xiàn)地址相同的情況,說明這里的“Hello World”只是存儲在一個臨時的地方,兩個指針同時指向了這個“Hello World”,這時字符串不可寫。
什么叫不可寫?看下面。
part 2 數(shù)組定義字符串
#include<stdio.h> int main() { char s3[]="Hello World"; char* s; s=s3; printf("s3:0x%p\n",s3); printf("s:0x%p\n",s); s3[0]='B'; printf("%c\n",s3[0]); printf("%s\n",s3); printf("%s\n",s); printf("%d\n",sizeof(s3)); }
用數(shù)組定義字符串,字符串可寫,這時s3[0]=‘B’,結(jié)果可以改變就叫做字符串可寫。part1里的字符串不能改變,s3[0]='B’語句沒有作用。
這里用數(shù)組定義字符串后,再用指針指向這個字符串,和part1相比,地址復(fù)雜了許多,說明這個地址不是臨時地址了。
計算字符串長度12,Hello World+\0,\0也占有字符串的一位,但是不會顯示出來。
part 3 指針指向字符串
下面給出指針指向字符串的兩種方式:
\0才代表一個字符串的結(jié)束,\0才代表一個字符串的結(jié)束,\0才代表一個字符串的結(jié)束。它是數(shù)組的一部分。
#include<stdio.h> int main() { char b[]={'t','i','t','t','l','e','\0'}; char* a; a=b; printf("%s\n",a); } //或 #include<stdio.h> int main() { char b[]="tittle";//這和上面char b[]={'t','i','t','t','l','e','\0'};是相等的。 char* a; a=b; printf("%s\n",a); }
當(dāng)你不需要對字符串改變時,臨時用指針定義也可以的:
#include<stdio.h> int main() { char *b="tittle"; char *a; a=b; printf("%s\n",a); }
下面上一個帶有思考性的問題,下面的指針事實上是直接指向一個數(shù)組元素‘s’的,數(shù)組最后沒有‘\0’。
當(dāng)你硬要以字符串形式輸出時:
#include<stdio.h> int main() { char n[1]={'s'}; char* a; a=n; printf("%c\n",a[0]) printf("%s\n",a); }
結(jié)果出錯。
修正:
#include<stdio.h> int main() { char n[]={'s','\0'}; char* a; a=n; printf("%c\n",a[0]) printf("%s\n",a); }
這個結(jié)果正確,指針指向了數(shù)組中的字符串。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++ sdl實現(xiàn)渲染旋轉(zhuǎn)視頻的方法分享
一般情況下播放視頻時不需要旋轉(zhuǎn),但是如果是移動端錄制的視頻有時會出現(xiàn)rotate參數(shù),且視頻寬高也是互換的。所以本文為大家準(zhǔn)備了利用sdl實現(xiàn)渲染旋轉(zhuǎn)視頻的方法,需要的可以參考一下2022-12-12opengl實現(xiàn)直線掃描算法和區(qū)域填充算法
這篇文章主要為大家詳細(xì)介紹了opengl實現(xiàn)直線掃描算法和區(qū)域填充算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖)
這篇文章主要介紹了Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖),需要的朋友可以參考下2020-03-03