代码改变世界

char s[]字串和char *s字串有什麼区别?

2013-07-31 00:16  youxin  阅读(474)  评论(0编辑  收藏  举报

C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢?

Introduction

char s[] = "Hello World"; (只是用字符串常量初始化)
char *s  = "Hello World";


皆宣告了s字串,在C-style string的函數皆可使用,但兩者背後意義卻不相同。

char s[] = "Hello World";


的s是個char array,含12個byte(包含結尾\0),"Hello World"對s來說是initializer,將字元一個一個地copy進s陣列

char *s = "Hello World";


的s是一個pointer指向char,由於"Hello World"本身就是一個string literal,所以s指向"Hello World"這個string literal的起始記憶體位置。

#include <iostream>
 2
 3using namespace std;
 4
 5int main() {
 6 char s1[] = "Hello World";
 7 char *s2  = "Hello World";
 8 
 9 cout << "size of s1: " << sizeof(s1) << endl;
10 cout << "size of s2: " << sizeof(s2) << endl;
11}

size of s1: 12
size of s2: 
4

 

还有很重要的一点,char *s是字符串常量,不能更改.如果*s='a'会报错。静态数据区存放的是全局变量和静态变量,从这一点上来说,字符串常量又可以称之为一个无名的静态变量,

memset(s,'a',20)会报错。

char 【】就可以。分配在stack去。