char a[] = "abcdef";
char *p = "abcdef";
这两句话有什么区别
a是一个分配的字符数组,里面存放的字符串 abcdef
第二个是先在常量区存放字符串 abcdef,然后p是一个指针指向常量字符串
a数组作为局部变量被存储在栈区,使用完就被释放了;
第二个abcdef被存储在静态数据区,可以理解为全局的。p指向这个区域。
例如
void main()
{
myGetString();
}
void myGetString()
{
char a[] = "abcdef";
char *p = "abcdef";
}
当myGetString()执行完之后 a数组中的数据 abcdef 被释放了;
而第二个abcdef 还在。要在整个程序结束后释放
一个是申请一个char型数组,然后将这个数组赋值为“abcdef”
一个是将指针p指向一个“abcdef”的字符串常量
第一个数组,是在内存区申请了一块内存,然后赋予指定的值,可以进行修改。
第二个常量指针,在只读区定义一个指定的常量,然后用指针指到那里,你不能修改指针所指向区域的值。
例如:
char *a = “test”;
char b;
可以做
a = &b;
不可以做
*a = 'c'';
或者
*a = "str"