CHAR[]与CHAR*
时间:2010-03-27 来源:qytan36
int main(int argc, char *argv[])
{
char *s1 = "hello"; //s1是指针,指向一个字符串常量,字符串常量没有在堆栈中分配空间,相当于编译时候已经固化的指令了,所以不能对其进行任何修改。
char s2[] = "world"; //s2是一个字符数组,s2为数组地址
printf("%d\n", sizeof(s1)); //output: 4. sizeof(char*)
printf("%d\n", sizeof(s2)); //output: 6. The length of "world\0".
s1[0] = 'a'; //Error, "hello"是字符串常量,不能修改
s2[0] = 'a'; //OK, s2是一个字符数组
s1 = s2; //OK
s2 = s1; //Error,s2是数组名称,也是数组的首地址,不能修改其值
return 0;
}
//在作为函数行参时候,二者没有区别,都是同样的数据类型char*
void f(char *s)
void f(char s[])
{
...
}
{
char *s1 = "hello"; //s1是指针,指向一个字符串常量,字符串常量没有在堆栈中分配空间,相当于编译时候已经固化的指令了,所以不能对其进行任何修改。
char s2[] = "world"; //s2是一个字符数组,s2为数组地址
printf("%d\n", sizeof(s1)); //output: 4. sizeof(char*)
printf("%d\n", sizeof(s2)); //output: 6. The length of "world\0".
s1[0] = 'a'; //Error, "hello"是字符串常量,不能修改
s2[0] = 'a'; //OK, s2是一个字符数组
s1 = s2; //OK
s2 = s1; //Error,s2是数组名称,也是数组的首地址,不能修改其值
return 0;
}
//在作为函数行参时候,二者没有区别,都是同样的数据类型char*
void f(char *s)
void f(char s[])
{
...
}
相关阅读 更多 +