C语言笔记——数组

  • Post author:
  • Post category:其他


一、一维数组的创建和初始化

什么是数组:一组相同类型元素的集合。

一维数组的创建:

int arr[];
char s[];
double arr1[];

变长数组:数组中存储的元素是变量。

int n=0;
scanf("%d",&n);
int arr[n];

变长数组在C99之前是比支持的,在C99标准后可以使用。

初始化

1.完全初始化:把数组中的每一个元素都赋值

int arr[10]={1,2,3,4,5,6,7,8,9,10};

2.不完全初始化:赋值一部分元素,其他元素默认为0。

int arr[10]={1,2,3,4,5};

二维数组

二维数组的创建方式

int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
char arr[3][4]==['0','1,'2','3','4','5','6','7','8','9','10','11'}
//arr[0],arr[1],arr[2]
//可以理解为行数组的数组名

注意:二维数组不可以省略列数。必须要指定列数。

数组作为参数传递

1.冒泡排序

数组传参传的是首元素的地址。

错误写法:

因为数组传的是首元素地址,所以在计算sz时,其实是sizeof(地址)/sizeof(第一个元素的大小)=1.

正确写法

void  bubble(int*arr)
{
    int i=0;
    for(i=0;i<sz-1;i++)
    {
        for(int j=0;j<sz-1-i;j++)  
        {
            if(arr[j]>arr[j+1])
            {
                int tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;           
            }        
        }  
    }
}
int main()
{
   int arr[10]={0};
    int i=0;
    for(i=0;i<10;i++)
    {
        scanf("%d",&arr[i]);    
    }
    int sz=sizeof(arr)/sizeof(arr[0]);
    bubble(arr);
    for(i=0;i<10;i++)
    {
        printf("%d ",arr[i]);    
    }
    return 0;
}

什么是数组名:

//数组名是什么:
int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    printf("%p\n",arr);
    printf("%p\n",&arr[0]);
    //两种特殊的情况
    //情况一
    printf("%d\n",sizeof(arr));//这里的arr是整个数组的名字;
    //情况二
    printf("%p\n",&arr);
    //&arr,这里的arr表示整个数组名,这里取出的是整个数组的地址。
    printf("%p",arr+1);//跳过数组的一个元素
    printf("%p",&arr+1);//跳过整个数组
    printf("%p",&arr[0]+1)//跳过数组的一个元素
}



版权声明:本文为qq_53893431原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。