一维数组
数组在创建时必须指定大小(初始化赋值时不用写大小),方括号内必须是常量或者常量表达式
但arr[0]是错误的,它有可能跟紧跟其后的第二个数组arr2[0]地址重复
数字数组
int arr[10];int arr[]={1,2,3,4,5,6,7,8,9,10];int arr[10]={……};都是正确的
字符数组
char [10]={'a','b','c'};char[]="abc"(申请三个字节);(申请四个字节包含‘\0‘)
char *P="abc",这种写法与上面两种不同,并没有创建数组,而时创建了一个字符串常量,将首元素的地址存放到指针p中。
题目1:
int main()
{
char arr[] = "abc";
char arr1[] = "abc";
if (arr == arr1)
{
printf("相同");
}
else
{
printf("不同");
}
输出结果
这里输出结果不同是虽然两个数组的首元素都时a,但是数组名代表的时首元素的地址,(它是一个常量,也无法被赋值)两组数组必然不在同一个地址中,所以不相同。
int main()
{
char *arr = "abc";
char *arr1 = "abc";
if (arr == arr1)
{
printf("相同");
}
else
{
printf("不同");
}
在这个题目中,定义的是指针,它们指向的都是常量字符串“abc“的首字符地址。
*当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。例如:char a[5];a[0] = "a";就是错误的,报错结果:invalid conversion from 'const char*'