如何写出高质量c代码 (二)数组和指针

今天时间不早了,关于数组和指针的的问题我们简单的来做下比较
1.指针是变量,数组名是常量

数组名是一个常量,因此不可以作为左值修改
例如:
int  array[10];
int *parray = array;
for(int i=0;i<10;i++)
{
    printf("[%d] = %d",i,*parray);
    ++parray;
    //这样是错误的
    //printf("[%d] = %d",i,*array);
    //++array;
}

2.大小不一样
数组名的大小是整个数组的大小,而指针在32位机上始终都是4个字节

int a[10];    
int *pa = a;
printf("szieof(a) = %d sizeof(pa) = %d \n",sizeof(a),sizeof(pa));//40    4

3.声明方式
这个自然也是不同的,哈哈哈凑字数了。

int *x;      //定义指针
int y[10];   //定义数组

其实归根到底,指针和数组不相同的,确切的说不完全相同

int array[];等价于  int * const array,你不能改变array的值

下面我来说说相同点和相关应用

1. extern  int  a[10];            //这里不能改为指针
2. 定义的时候 int a[];             //这里当然也不能改成指针
3. func(a[])                     //这里是可以修改成指针的,随你怎么用
4. 获取第N个数组元素/地址的时候,也是可以随便用的  a[N]等价于*(a + N)等价于 *(pa + N)

猜你喜欢

转载自blog.csdn.net/bin_zhang1/article/details/80964239