C语言初阶:数组,数组的灵活用法,多维数组的使用

1. 数组的高级定义

数组的赋值和初始化

  1. 数组未初始化,数组里面的值随机
  2. 数组初始化为 {0} ,数组里面的所有值都为 0
  3. 数组初始化为 {3} ,数组里面除第第一位为 3 其他都是 0

数组的大小 sizeof

定义 类型 占字节数
char 字符型 1个字节
int 整型 4个字节
double 双浮点型 8个字节

sizeof(arr)/sizeof(arr[0])
通过这种方法可以知道数组有多少个元素

感受不同数据类型所占字节大小:

#include <stdio.h>

int main(){
   
        int arr[21] = {
   3,4};
        for(int i=0;i<sizeof(arr)/sizeof(arr[0]);++i){
   
                printf("%d ",arr[i]);
        }
        printf("\n");

        char carr[12];
        int iarr[12];
        double farr[12];
        printf("carr = %d\n",sizeof(carr));
        printf("iarr = %d\n",sizeof(iarr));
        printf("farr = %d\n",sizeof(farr));
}

结果为:

3 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
carr = 12
iarr = 48
farr = 96

数组的地址(重要)

数组中每个元素的首地址 %p
数组的地址就是数组第一个元素的首地址

&days[i]  ====>  days+i      数组名+下标 = 当前元素的地址
days[i]   ====>  *(days+i)      解引用(数组名+下标) = 当前元素的值

#include <stdio.h>

int main(){
   
        int days[]={
   31,28,31,30,31,30,31,31,30,31,30,31};
        printf("&days=%p\n",&days);
        printf("days=%p\n",days);
        for(int i=0;i<12;++i){
   
                printf("%p %p\n",&days[i],days+i);
        }
        for(int i=0;i<12;++i){
   
                printf("%d %d\n",days[i],*(days+i));
        }
}

结果为:

&days=0x7fff9d36c550
days=0x7fff9d36c550
0x7fff9d36c550 0x7fff9d36c550
0x7fff9d36c554 0x7fff9d36c554
0x7fff9d36c558 0x7fff9d36c558
0x7fff9d36c55c 0x7fff9d36c55c
0x7fff9d36c560 0x7fff9d36c560
0x7fff9d36c564 0x7fff9d36c564
0x7fff9d36c568 0x7fff9d36c568
0x7fff9d36c56c 0x7fff9d36c56c
0x7fff9d36c570 0x7fff9d36c570
0x7fff9d36c574 0x7fff9d36c574
0x7fff9d36c578 0x7fff9d36c578
0x7fff9d36c57c 0x7fff9d36c57c
31 31
28 28
31 31
30 30
31 31
30 30
31 31
31 31
30 30
31 31
30 30
31 31

结论:

  1. &days、days、&days[0]、days+0
    数组地址、数组地址、数组首地址、数组首地址
    四者的地址相同

  2. days[i] 和 *(days+i)
    数组中对应元素的值 和 数组中对应元素地址的解引用
    二者的值相同

2. 数组与函数、数组与指针

案例1:填充数据

对数组填充数据,填充随机数:

随机数的生成:
使用rand()函数产生C语言的随机数,需要加入stdlib.h和time.h在表头,用到rand(),需要给srand()函数提供一个参数

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int* FillArr(int* arr,int n){
   
        for(int i=0;i<n;++i){
   
                arr[i]=i;
        }
        return arr;
}

int* RandArr(int* arr,int n){
   
        srand(time(NULL));
        for(int i=0;i<n;++i){
   
                arr[i]=rand();
        }
        return arr;
}

int* RandArr2(int* arr,int n){
   
        srand(time(NULL));
        for(int i=0;i<n;++i){
   
                arr[i]=rand()%n;
        }
        return arr;
}

int* RandArr3(int* arr,int n,int a,int b){
   
        srand(time(NULL));
        for(int i=0;i<n;++i){
   
                arr[i]=rand()%(b-a)+a;
        }
        return arr;
}


void PrintArr(int* arr,int n){
   
        for(int i=0;i<n;++i){
   
                printf("%d ",arr[i]);
        }
        printf("\n");
}

int main(){
   
        int arr[10];
        RandArr3(arr,10,4,17);
        PrintArr(arr,10);
}

结果为:

0 1 2 3 4 5 6 7 8 9 
769988010 634447882 634677093 170170961 1636749465 2009219543 2050419750 245631768 163043489 1877877574 
0 2 3 1 5 3 0 8 9 4 
16 7 15 16 4 10 6 9 15 5 

其中:
FillArr函数:     对arr数组填充数组的元素位置
RandArr函数:     对arr数组填充10个随机数
RandArr2函数:     对arr数组填充10个0-9的随机数
R

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值