数组名与指针,有很多联系,又有很大区别,使用时要注意区别。
通常的讲,主要有如下区别:
1、数组名指代一种数据结构,这种数据结构就是数组
char str[10]={0};
char *ptr;
ptr=str;
printf("sizeof(str):%d\n",sizeof(str));
printf("sizeof(ptr):%d\n",sizeof(ptr));
猜想一下运行结果一样吗?
不一样。在字长为32位的操作系统下,输出结果如下:
sizeof(str):10
sizeof(ptr):4
2、数组名是一个常量指针,因而不能改变其值,不能做自增、自减等操作。
对比一下以下语句
char str[10]={0};
char *ptr;
ptr=str;
str++;//1
ptr++;//2
1句在编译时会报告错误,2句则正常。
3、数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
void
test(char str[200])
{
printf("sizeof(str):%d\n",sizeof(str));
str++;
}
int
main()
{
test();
return 0;
}
上述代码编译可以通过,在32位操作系统上运行结果如下:
sizeof(str):4