日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C语言中字符数组和字符串指针分析

發(fā)布時(shí)間:2023/11/27 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中字符数组和字符串指针分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?寫下面的測(cè)試程序:

#include <stdio.h>

int main(int argc, char *argv[])
{

? char day[15] = "abcdefghijklmn";
? char* strTmp = "opqrstuvwxyz";

? printf("&day is %x\n",&day);
? printf("&day[0] is %x\n",&day[0]);
? printf("day is %x\n",day);
?
? printf("\n&strTmp is %x\n",&strTmp);
? printf("&strTmp[0] is %x\n",&strTmp[0]);
? printf("strTmp is %x\n",strTmp);
?
? getchar();?
? return 0;
}

運(yùn)行后屏幕上得到如下結(jié)果:



其實(shí)看到結(jié)果估計(jì)很多東西就好明白了,

??? 先看看前三個(gè)輸出也就是關(guān)于變量day的,在 char day[15] = "abcdefghijklmn"; 這個(gè)語句執(zhí)行的時(shí)候,系統(tǒng)就分配了一段長(zhǎng)15的內(nèi)存,并把這段內(nèi)存起名為day,里面的值為"abcdefghijklmn",如下圖所示:

??????? 再看程序,第一個(gè)輸出,&day,&號(hào)是地址運(yùn)算符,也就是day這個(gè)變量的內(nèi)存地址,很明顯,在最前面,也就是a字符所在字節(jié)的地址;
????????對(duì)于第二個(gè)輸出也就好理解了,&day[0],就是day數(shù)組中第一個(gè)變量(也就是a)的地址,因此他們兩個(gè)是一樣的;
??????? 第三個(gè)輸出是day,對(duì)于數(shù)組變量,可以使用變量名來索引變量中的內(nèi)容,其實(shí)這里的day可以理解成數(shù)組變量退化的指針,并且指向數(shù)組的開頭,既然把它理解成指針,那么它的值肯定是地址了,所以他的值和上面兩個(gè)也一樣。

??? 再看看后面三個(gè)輸出,關(guān)于字符串指針strTmp,在執(zhí)行char* strTmp = "opqrstuvwxyz";后,內(nèi)存的圖示如下:


如圖所示,內(nèi)存分配了兩段內(nèi)存,一個(gè)名為strTmp,類型是一個(gè)字符指針,另外一段是一個(gè)字符串常量,且strTmp里面存放著字符常量的首地址,注意這里無法通過strTmp修改這段字符串,因?yàn)槭浅A?#xff1b;于是程序中的后面三個(gè)輸出就好理解了;
????
? &strTmp:strTmp這個(gè)字符指針的地址
? &strTmp[0]:strTmp所指字符常量第一個(gè)字符的地址
? strTmp:strTmp這個(gè)字符指針的值,即字符常量的首地址

因此,最后兩個(gè)的值是一樣的。
????? 指針可以這樣理解,指針這種類型,和int,char,double等等是一樣的,只是它用來保存地址值的,而int變量保存整數(shù),char變量保存字符,僅此而已,就char型指針或者int指針,本質(zhì)是一樣的,都是存放的地址,只不過那個(gè)地址所里面的變量類型不同而已,還有一種void型指針,就是可以放任何類型變量的地址。

總結(jié)

以上是生活随笔為你收集整理的C语言中字符数组和字符串指针分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。