相同点:
都是定义一个字符串
不同点:
1.含义上的区别
char str[] 是定义一个字符串数组,数组对应的是一块内存区域,而char *str 是定义一个指向字符串的指针,即指向一块内存区域。
数组的内存大小和其地址在作用域里是固定不变的,只有它存储的内容可以改变;而指针却不同,它指向的内存区域的大小随时可以改变,而且当指针指向常量字符串时,它指向的内容是不可以被修改的,否则在运行时会报错。
看一个例子:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Hello";
char str2[] = "World";
strcpy(str1,str2);
printf("%s\n",str1);
return 0;
}
上面这段代码是可以运行的,因为数组的内容是可以被修改的。
再看下面这段代码:
#include<stdio.h>
#include<string.h>
int main()
{
char *str1 = "Hello";
char *str2 = "World";
strcpy(str1,str2);
printf("%s\n",str1);
return 0;
}
这段代码在编译时不会报错,但是在运行时结果会出错,原因在于这段代码企图修改 str1 的内容,由于 str1 和 str2 是指向常量字符串的指针,其内容是不可被修改的,所以在运行时会出错。
2.计算内存的区别
用 sizeof 可以直接计算出数组的字节数;而指针的大小只与编译器所处的平台有关,在32位平台上(例如X86)指针占4个字节,而在64位平台上(例如X64)指针占8个字节。
另外在进行参数传递时,数组会退化成为同类型的指针。