字元指針存儲
『壹』 請通俗一點的講講指針是怎麼存儲的
指針是存儲內存地址的變數,只是一種變數而已
就像int的變數存儲整形
就像float的變數存儲浮點形
就像char的變數存儲字元形
就像double的變數存儲高精度浮點形
char *,int *,float* 定義的指針都是一樣的,用來存放內存地址.一般來說可以存儲2^32次方那麼大的內存地址.
之所以有那麼多類型的指針是方便寫代碼,同時支持指針的自我加減操作.
最終的操作都是轉化成void*的指針來操作
假設你要讀取內存地址為0x5201314的那塊內存 void *p = 0x5201314;
cout<<(int)*p;//讀取4個位元組
cout<<(char)*p;//讀取1個位元組
。。。。。。
『貳』 c語言,字元串指針指向的字元串,那個字元串存儲在哪個位置
你要位置,把內存地址都給你列印出來了。然後你怎麼又牽扯到常量了?動態申請的變數(即malloc函數申請的變數)存放在堆區!
idxbuf=malloc(6*sizeof(char));
動態隨機分配內存空間,共6個char型數據大小的空間,因為是隨機的,idxbuf指針指向的內存空間的起始地址在後面的語句中列印出來:
printf("before idxbuf address:%p,idxbuf:%s ",&idxbuf,
&idxbuf:取地址,%p與指針對應,是輸出指針的地址。
address:0x7ffeffc9f0b0,就是字元串指針idxbuf指向的字元串存儲在內存中的地址位置。
你要字元串指針idxbuf的隨機分配的地址,只需要
printf("before idxbuf address:%p ",&idxbuf);
這一語句就可以了,原來的程序編譯有點問題,修改之後通過:
程序先編譯後鏈接,轉換成0與1的機器代碼後調入內存運行。這個問題被你牽扯到程序運行的內存分配方式,而不是你所說的想找字元串在內存中的地址。請用內存分配方式詳解提問!
簡單的說,一個程序調入內存後,在內存中分為以下5個部分。
1、棧區(stack)
2、堆區(heap)
3、全局區(靜態區)
4、文字常量區
5、程序代碼區
內存分配詳細不說了,
因為我已經很明確的根據提問回答了字元串存儲的位置:address:0x7ffeffc9f0b0。
『叄』 c語言 字元指針數組裡面的字元串存儲在哪
有個概念得弄清楚:字元指針「裡面」是沒有字元串的!一個有效的字元指針,如果指向了一個已經存在的字元串,那麼這個指針的「值」就是這個字元串的第一個字元的地址。根據這個理解,就是得「先」有字元串,後讓字元指針指向這個字元串才有可能,否則指針就是無效的。所以,有效的字元指針指向的字元串「原先」在什麼地方存儲它還在什麼地方。有個一般性的規則:動態創建的字元串在堆里,普通創建的字元串在棧里。無論堆里或棧里,都是系統在內存中劃分的一塊區域,只是訪問方式和生存周期不太一樣而已……
『肆』 字元指針存放
"Love china"存放在常量區,而p,q則是在棧中,putchar函數的參數是char型,*p是p指針的解引用,所以傳入的是p所指向的字元,p++後指針後移,再次傳入的就是下一個字母,所以第一個循環按原順序打出了Love china,C++中的字元串以『\0』結束,所以遇到『\0』就可以終止列印,整個字元串輸出完畢。
像puts這種函數的參數是char*,傳入指針後會自動列印並是指針後移直至遇到『\0』,作用和第一個循環是一樣的。無所謂是以字元串存放的還是字元形式存放的,p是指針,指向了內存的一個地址而已。
『伍』 字元指針是如何存放字元串的
字元指針無法存放字元串,只能指向一個字元串的起始地址。從字元串指針的定義方式(如char *c = "K&R";)可以看到,c存放字元'K'的地址,c+1後指向'&'的地址,因此*c == 'K',不是"K&R".
『陸』 c語言中,字元串指針怎樣實現對字元串的讀取與存儲
比如char s[30];
數組名s可以看作數組的首地址,可以直接對它進行操作;
或用一個char指針:char *p(注意:"字元串指針"沒有這個說法,可以叫做指向字元數組的指針)
p = s;或p = &s[0];用指針p指向s數組的首地址。
不知讀取是指列印還是引用;假如要訪用一個元素,可以用*(p + i),i指偏移量相當於p[i];也可以把p當成數組名用,比如p[2]指的是數組s的第三個元素,假如把『a』賦給第n個元素:*(p+n-1) = 'a';或p[n-1] = 'a';
如果直接用指針存個字元串:前提是字元串大小不能超過30 - 1;scanf("%s",p);復制可以使用
strcpy(p,"..........")等;
如果不通過指向字元數組:那麼必須要內存分配,用到malloc函數;
例如p = (char *)malloc(sizeof(char) *30);給指針p分配一個大小30位元組的內存用來存儲字元串;
接下來和上面差不多,不過p[30]必須是有結束符'\0';
『柒』 字元指針最多能指向多大的內存空間
不管是字元指針還是int指針,還是什麼其它的任何指針,他能指向的最大內存空間由使用的系統決定,如32位系統,因為指針存儲的是地址數據,而在32位系統中指針佔4個位元組,因此最大指向2^32 = 0x1 0000 0000=42億多的位元組空間。
『捌』 字元指針實際上存儲的是字元串常量值對嗎
不對的。
字元指針實際上存儲的是一個內存地址的值。編譯系統把該內存地址所存儲的值作為「字元」來解讀。
『玖』 字元指針存儲空間
在32為系統,指針都是4個位元組,不管是什麼類型的。
怎麼可能有一個位元組的,一個位元組的定址252,怎麼能夠定址到4g的空間呢,所以指針都是32位,4個位元組
『拾』 char a[]字元數組和char*b字元指針為什麼都可以儲存字元串呢 有沒有老司
如果你學過c++就知道, char [num]; 會有一個string類型替換。
數據是相同元素的集合,char數值 儲存字元串不是很正常嘛。【字元串是數值的集合】
char*b="aabbcc"; b指針指向"aabbcc" 的首地址,通過b的首地址,可以找到"aabbcc"、