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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

char s[] 和 char *s 的区别

發布時間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 char s[] 和 char *s 的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一種:

char *a 與char a[] 的區別

char *d = "hello" 中的a是指向第一個字符‘a'的一個指針;char s[20] = "hello" 中數組名a也是執行數組第一個字符'h'的指針。現執行下列操作:strcat(d, s)。把字符串加到指針所指的字串上去,出現段錯誤,本質原因:*d="0123456789"存放在常量區,是無法修的。而數組是存放在棧中,是可以修改的。兩者區別如下:

(1)讀寫能力:char *a = "abcd"此時"abcd"存放在常量區。通過指針只可以訪問字符串常量,而不可以改變它。而char a[20] = "abcd"; 此時 "abcd"存放在棧。可以通過指針去訪問和修改數組內容。

(2)賦值時刻:char *a = "abcd"是在編譯時就確定了(因為為常量)。而char a[20] = "abcd"; 在運行時確定.

(3)存取效率:char *a = "abcd"; 存于靜態存儲區。在棧上的數組比指針所指向字符串快。因此慢,而char a[20] = "abcd"存于棧上,快。
另外注意:char a[] = "01234",雖然沒有指明字符串的長度,但是此時系統已經開好了,就是大小為6-----'0' '1' '2' '3' '4' '5' '\0',(注意strlen(a)是不計'\0')

第二種:

char s[] 和 char *s 的區別

之前自己寫代碼碰到 char s[];和char *s 的各種方面總是搞不清楚,知道他們是不一樣的,但因為將他們打印出來有都是 相同的地址所以一直懵逼,今天特地網上整理了下,將他們徹底搞定

不同點:

1.在聲明時

char *s1="hello";//聲明一個指針指向常量"hello" char s2[]="hello";//在棧中開辟一個數組字符"hello"; /** s2[]="hello" 相當于 * char s2[6]; * s2[0]='h'; * s2[1]='e'; * s2[2]='l'; * s2[3]='l'; * s2[4]='0'; * s2[5]='\0'; **/

說明:

s1內容不能修改,因為他指向常量 s2內容可以修改,因為他指代內存中的變量區 s2其地址和容量在生命期里不能改變

?

2.使用時

char str[255];//聲明一個字符數組str占255個字節 char *p;//聲明一個字符串指針p char *sp;//聲明一個字符串指針spsp = str;/**實際上是 sp=&str; 編譯器做過處理**/ //需要有一個指針來保存原先地址 p=sp; *(sp++)='1'; *(sp++)='2'; *sp++='3';//相當于*(sp++) *sp++='4'; *sp++='5'; *sp='\0'; printf("%s\n",p);printf("%p\n",p); printf("%p\n",&str); printf("%p\n",sp-5); printf("%s\n",(sp-5));//等同于=============================================== int i=0; char str[255];//聲明一個字符數組str占255個字節 char *p;//聲明一個字符串指針pp=str; str[i++]='1'; str[i++]='2'; str[i++]='3'; str[i++]='4'; str[i++]='5'; str[i]='\0';printf("%s\n",p); printf("%p\n",p);

說明:

char str[] 實際是一個(字符數組)指針,不是(字符)指針 char str[] 不是一個真實意義(聲明的)的指針類型,不能進行正常指針的加減計算操作 char *p是一個指針類型可以進行計算操作

?


相同點:
1.作為形參完全相同
例:

void function(char *s1); void function(char s1[]);


2.只讀取不修改的時候
例:

char *s1="hello"; char s2[]="hello"; printf("s1[1]=[%c]\n",s1[1]); //s1[1]=[e] printf("s2[1]=[%c]\n",s2[1]); //s2[1]=[e] printf("s1=[%s]\n",s1); //s1=[hello] printf("s2=[%s]\n",s2); //s2=[hello]

?

總結

以上是生活随笔為你收集整理的char s[] 和 char *s 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。