關(guān)于c語言中輸出字符指針的相關(guān)問題
c語言輸出字符指針問題
例如定義一個 char * p = "hello";的字符指針
首先搞清楚在c語言中沒有字符串的類型,所以對字符串操作,有兩種形式:可以用字符指針(為什么不叫字符串指針,我個人覺得,字符指針針對的是單個字符的操作,即指針操作,所以就叫它字符指針吧。。。)
或者字符串?dāng)?shù)組(這里不在討論字符串相關(guān)問題,前面博客有討論過)這里的指針變量p,系統(tǒng)會為其重新分配內(nèi)存。
"talk is cheap , please show me your code"
說多無用,放碼過來


有人會問,p不是指針變量嗎?但是為什么printf("%s",p)他為什么打印的不是地址?
答:
是的p肯定是指針變量,它也一定是地址,但是別忘了在C語言中,系統(tǒng)都會默認在字符串末給我們加上\0用于結(jié)束字符串,所以用printf()輸出時候,只要你打印格式是%s,系統(tǒng)知道我們要輸出字符串,而且系統(tǒng)也可以確定字符串的長度,所以當(dāng)你用%s打印字符指針p的時候就會輸出字符串,如果你是以地址打印格式輸出的話,系統(tǒng)就會給我們打印出地址, 如果你是解指針(*p),那么系統(tǒng)就取p指針指向的內(nèi)容,此時看你自己以什么格式輸出,就用什么格式打印。
注意:
在字符指針中p 、*p 和&p的區(qū)別:p是指針變量指向字符串首元素(前提對p指針沒有進行指針操作),p中存放首元素的地址(一旦被初始化就,系統(tǒng)就為我們分配好了地址,而且地址也不能改變,因為字符指針是一個只讀變量,你不能企圖對一個初始化好的指針進行內(nèi)部修改),而*p是對指針變量p進行解引用操作,也就是指針所指向的內(nèi)容,而&p是對指針變量取地址,所以也就肯定不會和p的值相等,因為字符指針系統(tǒng)會為其分配內(nèi)存,p的值是字符串首元素的地址。
c語言指針求字符串長度
int stren(char* str){
char* start=str;
char* end=str;
while(*end!='\0'){
end++;
}
return end-start;
}
#include<stdio.h>
int main(){
char arr[]="bit";
int len=stren(arr);
printf("%d\n",len);
return 0;
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
VS2019 更新MSDN并創(chuàng)建快捷方式的實現(xiàn)
這篇文章主要介紹了VS2019 更新MSDN并創(chuàng)建快捷方式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
C語言中函數(shù)與指針的應(yīng)用總結(jié)
本篇文章是對C語言中函數(shù)與指針的應(yīng)用進行了詳細的分析介紹,需要的朋友參考下2013-05-05
C語言編寫實現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細介紹了C語言編寫實現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07
C++中set/multiset容器詳解(附測試用例與結(jié)果圖)
set/multiset屬于關(guān)聯(lián)式容器,底層結(jié)構(gòu)是用二叉樹實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于C++中set/multiset容器的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-02-02

