char 和 char 的區別

2021-07-31 06:39:40 字數 857 閱讀 9959

最近在做牛客網上的程式設計題時遇到了char 的用法,之前一直認為char 和char 沒有區別,乙個簡單的字串中空格替換,差點難倒了,因此,仔細蒐羅了一下char *和char 方面的知識,在此做個總結,方便以後檢視。

舉個簡單的例子:

char * s1 = 「hello」;

char s2 = 「hello」;

區別 s1是指標變數,它指向的記憶體區域的大小是可以改變的,並且如果指向的是字串常量,則它的內容是不可以修改的;而s2是個陣列型別的變數,它的元素的值是可以改變的,但是本身的記憶體位址不能改變。

例如:

s1[0] = 『w』; 會報錯,s1指向常量,不能改變常量中的某個元素;

s1 = s2;正確,改變指標的指向。

s2 = s1;錯誤,s2不是指標型別而是乙個變數名,不能改變值。

當s1指向s2時,s1和s2的用法就相同了,可以替換。

誤區(個人理解):字元陣列的大小就不能改變了嗎?

我們知道,無論s1還是s2,它的實際長度是6而不是5,最後有乙個字元結束符』\0』,輸出字串的時候就是尋找到』\0』,就結束往後尋找,因此我們想改變字元陣列大小的時候就好辦了,例如,str[5]=』w』;這是正確的,把』\0』的位置覆蓋掉。但是str[8]=』w』;這是錯誤的,越界了。

相同之處:

1、作為函式形參

void func(char * s1);

void func(char s2);

2、只進行讀

for(int i=0;iprintf("%c",s1[i]);

for(int i=0;iprintf("%c",s2[i]);

這兩種情況下情況相同。

char 和char 的區別

1 char是乙個陣列定義,char 是指標定義 也稱char為靜態陣列,char 為動態陣列 2 指標和陣列的區別 1 指標和陣列的分配 陣列是開闢一塊連續的記憶體空間,陣列本身的識別符號 也就是通常所說的陣列名 代表整個陣列,可以使用sizeof來獲得陣列所佔據記憶體空間的大小 注意,不是陣列元...

char 和char 的區別

char c abc c 0 t char c1 def c1 0 t err 首先c1是乙個指標,它只是指向 def 這個記憶體塊。而 abc 是乙個常量區,不可以對其進行更改。而c定義的是乙個陣列,在分配記憶體時,會自動給它分配四個位元組的位址,並且會進行乙份拷貝工作,此時分配是在棧區進行的,是...

char 和char 的區別

之前在用到char 和char,用到srtncat,讓char對char 進行新增時執行會崩潰,之後做了一些分析和練習,對char 和char有了更深的理解。下面附上一些測試資料。include include include using namespace std int main cout do...