当前位置:网站首页>C语言之数组
C语言之数组
2022-07-27 14:54:00 【小白菜00】
目录
一维数组的创建和初始化
数组:一组相同类型元素的集合
一维数组的创建方式

//数组初始化实例
int arr1[3];
char arr2[8];
double arr3[20];注意:数组创建,[]中要给一个常量才可以,不能使用变量
数组的初始化
数组的初始化是指,在创建数组的同时给数组内容一些合理的初始值(初始化)
//完全初始化
int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
//不完全初始化(数组长度为10,后5个补0)
int arr2[10] = { 1,2,3,4,5 };
//根据初始化内容确定数组长度的初始化
int arr3[] = {1,2,3,4,5,6};//数组长度为6
//关于字符数组的第一种写法
char ch1[5] = "bit";//不完全初始化,后面用'\0'补充
char ch2[] = "bit";//数组长度为3
//关于字符数组的第二种写法
char ch3[] = { 'b','i','t' };//一共3个元素
char ch4[6] = { 'b','i','t' };//一共6个元素,其他为'\0'一维数组的使用
[]:下标引用操作符,通过下标来访问数组中的元素,数组下标从0开始
#include <stdio.h>
int main() {
int arr1[10] = { 0 };
arr1[4] = 5;//将数组第5个数改为5
int sz = sizeof(arr1) / sizeof(arr1[0]);
//遍历数组
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d\n", arr1[i]);
}
return 1;
}一维数组在内存中的存储
- 一维数组的每个元素在内存中是连续存放的
- 随着数组下标的增长,地址由低到高变化
- 数组名是首元素的地址
二维数组的创建和初始化
二维数组的创建

初始化——创建的同时给其赋值
//完全初始化
int arr1[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//不完全初始化——后面补0
int arr2[3][4] = {1,2,3,4,5,6,7};
//第二种方法
int arr3[3][4] = { {1,2},{3,4},{4,5} };//这里不完全初始化,后两列补0
//第二种根据后面元素来确定行数,但一行有几个元素不能省略
int arr3[][4] = { {1,2},{3,4},{4,5} };二维数组的使用
二维数组的操作也是通过下标[][]
#include <stdio.h>
int main() {
//遍历二维数组
int arr1[][4] = { {1,2},{3,4},{4,5} };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", arr1[i][j]);
}
printf("\n");
}
return 1;
}二维数组在数组中的储存
- 二维数组在内存中也是连续存放的(一行内部连续,换行也是连续)
- 二维数组在内存中存放就是一个很长的一维数组
#include <stdio.h>
int main() {
//遍历二维数组
int arr1[][4] = { {1,2},{3,4},{4,5} };
int i = 0;
int* p = &arr1[0][0];
for (i = 0; i < 12; i++) {
printf("%d ", *p);
p++;
}
return 1;
}数组作为函数参数
数组在传参的时候传递的是数组首元素的地址
数组名是数组首元素的地址但是有2个例外
- sizeof(数组名)——数组名表示整个数组计算的是整个数组的大小单位是字节
- &数组名——数组名表示整个数组,取出的是整个数组的地址
除此之外所有数组名都是数组首元素的地址
#include <stdio.h>
int main() {
int arr[10] = { 0 };
printf("%p\n", arr);
printf("%p\n", arr+1);//差4
printf("%p\n", &arr);
printf("%p\n", &arr+1);//差40
return 1;
}#include <stdio.h>
void main() {
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));//16——整个数组的大小
printf("%d\n", sizeof(a+0));//4——第一个元素的地址
printf("%d\n", sizeof(*a));//4——数组的第一个元素
printf("%d\n", sizeof(a+1));//4——第二个元素的地址
printf("%d\n", sizeof(a[1]));//4——数组的第二个元素
//&a
printf("%d\n", sizeof(&a));//4——数组的地址,地址一般为4(32位)
printf("%d\n", sizeof(*&a));//16——整个数组的大小
printf("%d\n", sizeof(&a+1));//4——就是一个地址(数组后面空间的地址),地址一般为4(32位)
printf("%d\n", sizeof(&a[0]));//4——数组第一个元素的地址
printf("%d\n", sizeof(&a[0]+1));//4——数组第二个元素的地址
}字符串
定义:由双引号引起来的一串字符称为字符串的字面值,或者亦称字符串,其是一个数组
注意:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串的内容。
单引号包裹的东西是字符常量,双引号里包裹的东西为字符串其能包裹多个字符;
int main() {
char a[] = "abc";
char b[] = { 'a','b','c' };
printf("%s\n", a);
printf("%s", b);
}打印结果:

原因:字符串的结束标志为\0,b没遇到\0会继续向后打印直到找到\0
边栏推荐
猜你喜欢

牛客题目——对称的二叉树
![Jerry's built-in touch parameters for modification [chapter]](/img/6b/38c3ad28a7256e5e41bb444d0993db.png)
Jerry's built-in touch parameters for modification [chapter]

Insert pictures in word to maintain high DPI method

jsp-El表达式,JSTL标签

(二)动态卷积之Dynamic Convolution

UML diagram introduction

使用百度飞桨EasyDL实现电商UGC图片自动分类

C语言之文件操作

Implementation of filler creator material editing tool

As changes the background theme and background picture
随机推荐
除了「加机器」,其实你的微服务还能这样优化
Jerry's in ear detection function [chapter]
[paper reading] a CNN transformer hybrid approach for cropclassification using multitemporalmultisensor images
Gurobi——GRBLinExpr
清晰的认识Torchvision(思维导图版)
KMEANS 实现
Insert pictures in word to maintain high DPI method
As changes the background theme and background picture
从零开始Blazor Server(1)--项目搭建
CDQ divide and conquer and whole dichotomy learning notes
【pytorch】|transforms.FiveCrop
最大子段和 Go 四种的四种求解
D3.js create a cool arc
The 21st - -- the 30th time
Automatic classification of e-commerce UGC pictures using Baidu PaddlePaddle easydl
【论文阅读】Transformer with Transfer CNN for Remote-Sensing-ImageObject Detection
[paper reading] transformer with transfer CNN for remote sensing imageobject detection
JDBC连接数据库
Matplotlib drawing error: "! Latex error: file `type1cm.sty 'not found." solution
2021-05-30