欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-15 20:20:48
...

今天时间不早了,关于数组和指针的的问题我们简单的来做下比较
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)