C语言笔记——数组

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

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

一维数组的创建:

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)//跳过数组的一个元素
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影中人lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值