int main()
{char ch = 'w';
char *pc = &ch;
return 0;
}
將一個(gè)char
類型的變量的地址放到一個(gè)char*
類型的指針里去,這里的char*ps
就是字符指針
在這里的字符指針與之前的整形指針等的用法基本相同,不多做介紹
字符指針不但可以指向一個(gè)字符,并且還可以指向一個(gè)字符串
如下代碼:
int main()
{char* pstr = "abcdef";//這里是把一個(gè)字符串放到pstr指針變量里了嗎?
return 0;
}
接下來我們可以分析:
"abcdef"
是一個(gè)字符串,它占7個(gè)字節(jié)空間(因?yàn)楹竺孢€有一個(gè)看不見的\0
),而pstr
只是一個(gè)指針類型,它只有4或8個(gè)字節(jié)大小,7個(gè)字節(jié)大小的內(nèi)容是不可能放zh到4個(gè)字節(jié)大小的指針中的。char* pstr = "abcdef"
的意思?jí)焊筒皇前?code>abcedf放到pstr
里去這里實(shí)際上是把字符串"abcdef"
首字符a
的地址放到pstr
里去
如下圖:
接下來,我們可以使用字符指針,對(duì)字符串進(jìn)行輸出,因?yàn)檩敵龅淖址?,需要?code>%s類型,并且pstr
里存的已經(jīng)是字符串的首字符的地址了,所以可以直接輸出字符串,代碼如下:
int main()
{char* pstr = "abcdef";
printf("%s\n", pstr);
return 0;
}
輸出結(jié)果:
因?yàn)?code>pstr的類型是字符指針,可以存放單獨(dú)的字符,可以對(duì)單獨(dú)字符進(jìn)行操作,所以可以通過指向字符串的字符指針對(duì)字符串內(nèi)任一個(gè)字符進(jìn)行操作,這里可以使用指針與int
類型的加減實(shí)現(xiàn)
int main()
{char* pstr = "abcdef";
printf("%c\n", *pstr); //這里pstr里存放的就是a的地址,直接解引用輸出就是a
printf("%c\n", *(pstr + 1));//這里指針加1,使指針指向下一個(gè)字符b,再解引用,輸出b
return 0;
}
輸出結(jié)果:
這里的指向字符串的字符指針實(shí)際上與數(shù)組有些類似,還可以使用數(shù)組的形式取出字符
int main()
{char* pstr = "abcdef";
printf("%c\n", pstr[1]);
return 0;
}
輸出結(jié)果:
這里可以看到
printf("%c\n", *(pstr + 1))
語句與printf("%c\n", pstr[1])
的效果一樣,都是輸出字符串內(nèi)的第二個(gè)字符
可以得出一個(gè)結(jié)論:
如果a
是一個(gè)字符串或數(shù)組的首元素地址,x
是一個(gè)整數(shù)(大小小于數(shù)組或字符串長度減1),*(a+x)
與a[x]
是等價(jià)的
這里的代碼其實(shí)不夠標(biāo)準(zhǔn):
因?yàn)槭菍⒊A孔址苯哟娴阶址羔樦?,常量字符串是不能被修改的,如果后面有代碼通過字符指針修改常量字符串,則程序會(huì)崩潰
所以最好是寫成這樣:const char* pstr ="abcdef"
//輸出結(jié)果是什么?
#includeint main()
{char str1[] = "hello world.";
char str2[] = "hello world.";
const char *str3 = "hello world.";
const char *str4 = "hello world.";
if(str1 ==str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if(str3 ==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
在進(jìn)行char str1[] = "hello world."
和char str2[] = "hello world."
兩句時(shí),會(huì)建立兩個(gè)相互獨(dú)立的空間,數(shù)組名表示數(shù)組首元素地址,所以str1!=str2
在進(jìn)行const char *str3 = "hello world."
和·const char *str4 = "hello world."
,因?yàn)?code>"hello world."是常量字符串,常量字符串是不可以被修改的,所以沒有必要在內(nèi)存中存兩分,所以str3==str4
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章標(biāo)題:C語言中的字符指針-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://jinyejixie.com/article20/dhccco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、ChatGPT、App設(shè)計(jì)、品牌網(wǎng)站建設(shè)、網(wǎng)站排名、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容