一、数组是一片连续的内存区域,在C 语言中,数组的大小在编译时必须先确定下来
数组的任何操作即下标操作等同于指针的运算
如 int a[5],*P=a;
则 a[2]=0 *(a+2)=0 p[2]=0 *(p+2)=0 都是等价的
二、不同点
1、数组名是指向数组的常量指针,其值不能被被修改,而指针的值则可以被修改。
如 int a[5],*P=a;
a++=2;//错误
p++=2;//正确
2、sizeof()求值结果不同
char *str =“hello”; char str1[]=“hello”;
sizeof(str) = 4; 结果是指针变量所占的内存数
sizeof(str1) = 6;结果是数组的大小
3、数组空间由系统隐式的分配与释放,指针需要显示的调用malloc和free进行申请与释放
4、当数组作为函数的形参时,这时系统并不会分配一段连续的内存空间,而是在栈中分配一个指针变量,这时数组名其实就是这个指针变量。
void arrayTest(char str[])
{
printf(“%d”, sizeof(str);
}
一下方法调用void arrayTest(char str[])函数
Char str1[] = ‘hello”;
arrayTest(str1)打印为4
这时打印的是指针str所占的字节数,并不是数组的大小。