今天在工作中定义数组的时候习惯性的使用char型指针后直接等于字符串,但在编译通过后运行的时候产生了段错误,因为着急就(整个函数代码还是比较多的)没仔细看代码,只是抱着试试看的心态,将定义换成了数组后等于字符串的形式,居然没有在出现段错误,感到很奇怪(刚干程序员没多久,一直以为数组名就是指针呢)。在这里做个记号,提醒我以后有时间的时候查一下段错误的原因。今天先总结一下刚从网上找到的数组名和char型指针的区别和联系。
1.数组名不是指针;
2.数组名可以当做一个指针常量使用;
3.指向数组的指针,就紧紧是一个指针;
4.当函数形参使用数组名是,其会被转换成一个单纯的指针。
以下是证明上面四点的论据:
1. 首先数组名不是指针,这很容易证明。
#include <string.h>
#include <stdio.h>
int main()
{
char str1[]="Hello world!";
char *str2="Hello world!";
printf("Size of str1 is: %d\n",sizeof(str1));
printf("Size of str2 is: %d\n",sizeof(str2));
printf("Size of char is %d\n",sizeof(char));
return 0;
}
执行结果如下