字符數組與字符串常量區別
#include <stdio.h>
int main()
{char str1[] = "hello bit.";char str2[] = "hello bit.";char *str3 = "hello bit.";char *str4 = "hello bit.";if(str1 == str2)printf("str1 and str2 are same\n");elseprintf("str1 and str2 are not same\n");if(str3 == str4)printf("str3 and str4 are same\n");elseprintf("str3 and str4 are not same\n");return 0;
}
從這個代碼可以看出str1和str2是兩個不同的字符數組,而str3和str4是兩個字符指針,"hello bit."是一個字符串常量,需要申請內存進行存儲。
(1)對于? char str1[] = "hello bit.";?? char str2[] = "hello bit.";是從"hello bit."一個一個賦值給? char str1[]和? char str2[];雖然它們的存儲的內容都是"hello bit.",但是存儲在兩個不同的數組中,數組名是數組首元素的地址,所以str1 != str2
(2)? char *str3 = "hello bit."和char *str4 = "hello bit."是存儲字符串常量"hello bit."的首元素h的地址,"hello bit."是一個字符串常量,需要申請一份內存空間進行存儲就行,所以str3和str4都是存儲"hello bit."的首元素h的地址,,所以它們地址是一樣的。即str3?== str4。
(3)對于要操作字符數組,對數組中存儲的元素進行修改就要寫出數組的形式,就如:? char str1[] = "hello bit."; 如果對的元素不進行修改操作,可以寫成指針的形式來存儲字符串常量,就如:?char *str3 = "hello bit.";
?