字符数组与字符指针的区别
在 C 语言中,可以用两种方法表示和存放字符串:
(1)用字符数组存放一个字符串
char str[]="IloveChina";
(2)用字符指针指向一个字符串
char *str="IloveChina";
那么这两种表示方式有什么区别呢?
- 相同点 : str都是指针, 指向char类型。
- 不同点 : char str[] 把内容存在栈。char *str 则把指针存在栈,把内容存在常量区。
下面我们通过代码验证一下:
int main()
{
int a = 1;
char* str1 = "abcd";
char str2[] = "abcd";
static int b = 2;
printf("a的地址:%p\n", &a);
printf("str1的地址:%p\n", &str1);
printf("abcd的地址:%p\n", str1);
printf("str2的地址:%p\n", &str2);
printf("b的地址:%p\n",&b);
return 0;
}
我们知道变量a是储存在栈中的,静态变量b储存在常量区。
通过打印出的地址我们可以推断出指针str1储存在栈中,他所指的字符串的地址与b的地址相似,推断在常量区;而str2所打印的地址与a的地址相似,推断在栈区。