1、如下代码的输出结果是
#include <stdio.h>
int main()
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
printf("%d\n",str1 == str2);
printf("%d\n",str3 == str4);
printf("%d\n",str5 == str6);
printf("%d\n",str7 == str8);
return 0;
}
// 0 0 1 1
因为 str1 和 str2 两个字符数组都存储在栈空间上,但两者的地址值不相等( str3 和 str4 也同理)。而 str5 和 str6 并非字符数组而是字符指针,并不分配存储区,其后的 “abc” 以常量形式存于常量区,str5 和 str6 是指它们指向的地址的首地址,而它们自己仅是指向该区首地址的指针,所以相等。顺便提一下:&str5 和 &str6 是指指针自己的地址,所以两者地址是不相等的。str7 和 str8这样定义会警告,因为“abc”为常量,需要加const加以修饰!!!
2、如下代码的输出结果是
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str1[] = {'1', '0', '0', '\0', 'a', '\0', '0'};
char str2[6] = {'1', '0', '0', '0', '0', '0'}