一维数组详解

目录

一、数组是什么?

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

1.1数组的创建方式:

1.2数组创建的实例

2.1数组的初始化

三、一维数组的使用

四、一维数组在内存中的存储

五、数组与指针之间的简单联系

1.1数组传参,数组接收

1.2 数组传参,指针接收


一、数组是什么?

简单来说数组就是一组相同类型元素的集合,常见的比如有整型数组,字符型数组,整型数组就是存放一组整数的数组。

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

1.1数组的创建方式:

type_t arr_name [const_n];

//type_t 是指数组的元素类型

//const_n 是一个常量表达式,用来指定数组的大小。

1.2数组创建的实例

//代码1

int arr1[10];

//代码2

int count = 10;

int arr2[count];//数组时候可以正常创建?

//代码3

char arr3[10];

float arr4[1];

double arr5[20];

代码3这种形式:在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。

即数组里面用变量定义某些编译器支持,我使用vs2019不支持。

2.1数组的初始化

int arr1[10] = {1,2,3};

int arr2[] = {1,2,3,4};

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

char arr4[3] = {'a',98, 'c'};

char arr5[] = {'a','b','c'};

char arr6[] = "abcdef";

arr1为不完全初始化,前三位赋值为1,2,3,后面都赋值为0;

arr2为不指定大小的初始化;

需要特别注意arr5,与arr6的赋值方式,arr5中有3个字符a,b,c,

而arr6中有7个元素包括’\0‘,可以由下列图片可得。

注意:数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确

定。

坑点:

char arr1[] = "abc";

char arr2[3] = {'a','b','c'};

由于这两种初始化的不同,经常用sizeof和strlen来坑人。

sizeof是求空间的大小,char是一个字节乘arr1中的a,b,c,'\0';

但是arr2这种初始化其中没有’\0'

strlen这个库函数是求‘\0’之前的字符长度,而arr2这种初始化数组末尾没有\0,导致其出现了随机数。

三、一维数组的使用

#include

int main()

{

int arr[10] = {0};//数组的不完全初始化

//计算数组的元素个数

int sz = sizeof(arr)/sizeof(arr[0]);

//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:

int i = 0;//做下标

for(i=0; i

{

arr[i] = i;

}

//输出数组的内容

for(i=0; i

{

printf("%d ", arr[i]);

}

return 0;

}

总结:

  1. 数组是使用下标来访问的,下标是从0开始。
  2. 数组的大小可以通过计算得到。

int arr[10];

int sz = sizeof(arr)/sizeof(arr[0]);

四、一维数组在内存中的存储

#include

int main()

{

int arr[10] = {0};

int i = 0;

int sz = sizeof(arr)/sizeof(arr[0]);

for(i=0; i

{

printf("&arr[%d] = %p\n", i, &arr[i]);

}

return 0;

}

仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。

由此可以得出结论:数组在内存中是连续存放的。

五、数组与指针之间的简单联系

1.1数组传参,数组接收

void Print(char ch[])

{

int i=0;

while (ch[i])

{

printf("%c ", ch[i]);

i++;

}

}

#include

int main()

{

char arr[] = "abcdefg";

Print(arr);

return 0;

}

1.2 数组传参,指针接收

void Print(char* p,int sz)

{

int i = 0;

for (i = 0; i < sz; i++)

{

printf("%c ", p[i]);

}

}

#include

#include

int main()

{

char arr[] = "abcdefg";

int se = strlen(arr);

Print(arr,se);

return 0;

}

void Print(char* p,int sz)
{
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%c ", p[i]);
    }
}

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[] = "abcdefg";
    int se = strlen(arr);
    Print(arr,se);
    return 0;
}

  • 23
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值