關於c語言中輸出字符指針的相關問題

c語言輸出字符指針問題

例如定義一個 char * p = "hello";的字符指針

首先搞清楚在c語言中沒有字符串的類型,所以對字符串操作,有兩種形式:可以用字符指針(為什麼不叫字符串指針,我個人覺得,字符指針針對的是單個字符的操作,即指針操作,所以就叫它字符指針吧。。。)

或者字符串數組(這裡不在討論字符串相關問題,前面博客有討論過)這裡的指針變量p,系統會為其重新分配內存。

"talk is cheap , please show me your code"

說多無用,放碼過來

有人會問,p不是指針變量嗎?但是為什麼printf("%s",p)他為什麼打印的不是地址?

答:

是的p肯定是指針變量,它也一定是地址,但是別忘瞭在C語言中,系統都會默認在字符串末給我們加上\0用於結束字符串,所以用printf()輸出時候,隻要你打印格式是%s,系統知道我們要輸出字符串,而且系統也可以確定字符串的長度,所以當你用%s打印字符指針p的時候就會輸出字符串,如果你是以地址打印格式輸出的話,系統就會給我們打印出地址, 如果你是解指針(*p),那麼系統就取p指針指向的內容,此時看你自己以什麼格式輸出,就用什麼格式打印。

註意:

在字符指針中p 、*p 和&p的區別:p是指針變量指向字符串首元素(前提對p指針沒有進行指針操作),p中存放首元素的地址(一旦被初始化就,系統就為我們分配好瞭地址,而且地址也不能改變,因為字符指針是一個隻讀變量,你不能企圖對一個初始化好的指針進行內部修改),而*p是對指針變量p進行解引用操作,也就是指針所指向的內容,而&p是對指針變量取地址,所以也就肯定不會和p的值相等,因為字符指針系統會為其分配內存,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;
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: