C语言初阶—数组

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

        在C99标准之前,数组的大小必须是常量或常量表达式。

        在C99标准之后,数组的大小可以是变量,可以支持变长数组,但变长数组不能初始化。

        不完全初始化,剩余的元素默认初始化为0 。

        数组访问操作符,下标引用操作符----> [ ]

        数组是使用下标来访问的,下标是从 0 开始的。

        数组的大小可以通过计算得到。

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

        数组在内存中是连续存放的。

#include <stdio.h>

int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for(i = 0;i <= sz - 1;i++)
		printf("arr[%d]的地址是%p\n",i,&arr[i]);
	return 0;
}

        二维数组的使用也是通过下标的方式。

        可以把二维数组理解为:一维数组的数组,即二维数组里每个元素都是一个一维数组。

#include <stdio.h>

int main()
{
	int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	int i = 0;
	int j = 0;
	for(i = 0;i < 3;i++)
		for(j = 0;j < 4;j++)
			printf("arr[%d][%d]的地址是%p\n",i,j,&arr[i][j]);
	return 0;
}

        分析图上地址:二维数组在内存中也是连续存储的。

        数组传参的时候,形参有两种写法:

        1.数组

        2.指针

        数组名本质上是:数组首元素的地址,但是这个说法也不太准确,数组名确实能表示首元素的地址,但是有两个例外:

1.sizeof(数组名) ,这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

#include <stdio.h>

int main()
{
	int arr[10] = {10,2,3,14,5,6,17,8,9,1};
	int n = 0;
	printf("%p\n",arr);
	printf("%p\n",arr + 1);
	printf("%p\n",&arr[0]);
	printf("%p\n",&arr[0] + 1);
	printf("%p\n",&arr);
	printf("%p\n",&arr + 1);
	n = sizeof(arr);
	printf("%d\n",n);
	return 0;
}

        二维数组的数组名也表示二维数组首元素的地址,二维数组首元素相当于第一行元素,也就是一个一维数组,第一行元素4个,数组元素是 int 类型,一共是4 * 4 = 16字节。

#include <stdio.h>

int main()
{
	int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	int n = 0;
	int row = 0;
	int col = 0;
	printf("%p\n",arr);
	printf("%p\n",arr + 1);
	printf("%p\n",&arr[0]);
	printf("%p\n",&arr[0] + 1);
	printf("%p\n",&arr);
	printf("%p\n",&arr + 1);
	n = sizeof(arr);
	row = sizeof(arr) / sizeof(arr[0]);//行
	col = sizeof(arr[0]) / sizeof(arr[0][0]);//列
	printf("%d\n",n);
	printf("%d\n",row);
	printf("%d\n",col);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/428302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++_leetcode_寻找峰值

目录 一、寻找峰值的示例 二、官方实现代码及解释 1、官方测试结果&#xff1a; 2、代码解释&#xff1a; 3、解题思路&#xff1a; 三、我的暴力解决 1、测试一&#xff1a; 2、测试二&#xff1a; 3、最终“暴力求解”代码&#xff1a; 4、官网提交测试通过&#xf…

终极排序(快排,归并,库函数)

一、快速排序 1、确定分界点&#xff1a;q [ l ] , q [ ( l r ) / 2 ] , q [ r ] ,或者其它区间之中的随机数。&#xff08;左 l 右 r &#xff09; 2、调整区间&#xff1a;&#xff08;较难理解的部分&#xff09; &#xff08;1&#xff09;、暴力做法 …

基于Siamese网络的zero-shot意图分类

原文地址&#xff1a;Zero-Shot Intent Classification with Siamese Networks 通过零样本意图分类有效定位域外意图 2021 年 9 月 24 日 意图识别是面向目标对话系统的一项重要任务。意图识别(有时也称为意图检测)是使用标签对每个用户话语进行分类的任务&#xff0c;该标签…

云手机的境外舆情监控应用——助力品牌公关

在当今数字化时代&#xff0c;社交媒体已成为品牌传播和互动的主要平台。随之而来的是海量的信息涌入&#xff0c;品牌需要及时了解并应对海外社交媒体上的舆情变化。本文将介绍如何通过云手机进行境外舆情监控&#xff0c;更好地帮助企业公关及时作出决策。 1. 境外舆情监控与…

图像实现曲面屏效果

图像实现曲面屏效果 双线性插值 双线性插值是一种常用的图像插值方法&#xff0c;用于在图像中两个相邻像素之间进行插值&#xff0c;以获取介于它们之间某个位置的像素值。在透视变换等情况下&#xff0c;由于原始图像的像素点与目标图像的像素点位置不完全重合&#xff0c;…

HTML入门:推荐1款免费好用的web开发工具

前言 你好&#xff0c;我是云桃桃。 在过去的 10 年里&#xff0c;我一直专注于 web 前端开发领域&#xff0c;积累了丰富的经验和知识。 所以&#xff0c;接下来&#xff0c;我会把自己所学所做给体系化输出&#xff0c;我将持续与你分享关于 HTML、CSS、JavaScript&#x…

yolov7添加spd-conv注意力机制

一、spd-conv是什么&#xff1f; SPD-Conv&#xff08;Symmetric Positive Definite Convolution&#xff09;是一种新颖的卷积操作&#xff0c;它主要应用于处理对称正定矩阵&#xff08;SPD&#xff09;数据。在传统的卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;…

天拓四方工业物联网网关在质量管理方面的应用

项目背景 某印刷企业为了提高产品质量和客户满意度&#xff0c;决定建立印刷质量追溯系统&#xff0c;以便对生产过程中的关键参数和产品质量进行追溯和管理。 应用方案 该企业选择了一款具备数据采集和传输功能的工业物联网网关&#xff0c;并与印刷机、切纸机等核心设备进…

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集 前言脑模板方面相关笔记清单 基于脑网络的方法方面数据基本方面 前言 这里&#xff0c;我将展开有关我自己关于脑影像数据相关介绍的笔记及有关脑网络的笔记合集。其中&#xff0c;脑网络的相关论文主要…

MySQL篇—执行计划之覆盖索引Using index和条件过滤Using where介绍(第三篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

vscode 本地/远程添加python解释器

文章目录 1. 背景2. 增加python解释器 1. 背景 我们在使用 vscode 去远程调试代码时&#xff0c;如果环境存在多个 Python 版本&#xff08;如用 conda 管理&#xff09;&#xff0c;没有选择正确的 Python 解释器会导致少包、库不适配等各种问题 2. 增加python解释器 windo…

kubernetes(k8s)集群超级详细超全安装部署手册

一、卸载k8s 针对机器已安装过k8s的情况&#xff0c;如未安装过&#xff0c;请忽略。 # 首先清理运行到k8s群集中的pod&#xff0c;使用 kubectl delete node --all# 使用脚本停止所有k8s服务 for service in kube-apiserver kube-controller-manager kubectl kubelet etcd k…

Linux的进程的概念

目录 1.冯诺依曼体系结构&#xff08;硬件&#xff09; 2.操作系统(软件) 2.1概念 2.2设计os(操作系统)的目的 2.3如何理解管理 2.4系统调用和库函数概念 3.进程 3.1基本概念 3.2描述进程-PCB和组织进程 3.3ps axj指令 3.4查看进程 3.5通过系统调用获取进程表示符(P…

价格腰斩,腾讯云2024优惠活动云服务器62元一年,多配置报价

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

Mac M系列芯片如何重新安装系统

使用可引导安装器重新安装&#xff08;可用于安装非最新的 Mac OS&#xff0c;系统降级&#xff0c;需要清除所有数据&#xff0c;过程确保连接上网络&#xff0c;虽然这种方式不会下载 Mac OS&#xff0c;但是需要下载固件等信息&#xff09; 插入制作好的可引导安装器&#x…

如何在Linux使用Docker部署Redis并结合内网穿透实现公网远程连接本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 正文开始前给大家推荐个网站…

pandas.DataFrame新增列、dropna()方法-丢弃含空值的行、列;inf的处理技巧

在Dataframe中新添加一列 直接指明列名&#xff0c;然后赋值就可 import pandas as pddata pd.DataFrame(columns[a,b], data[[1,2],[3,4]]) data >>> dataa b 0 1 2 1 3 4 添加一列’c‘&#xff0c;赋值为空白值。打印出来 data[c] data >>>…

汽车碰撞与刮伤的实用维修技术,汽车的车身修复与涂装修补教学

一、教程描述 本套汽车维修技术教程&#xff0c;大小7.44G&#xff0c;共有60个文件。 二、教程目录 01-汽车车身修复教程01-安全规则&#xff08;共3课时&#xff09; 02-汽车车身修复教程02-汽车结构&#xff08;共3课时&#xff09; 03-汽车车身修复教程03-汽车修复所使…

Ambari动态给YARN分配计算节点

1.前言 YARN可用的计算节点数量并不总是等于 Hadoop集群节点数量&#xff0c;可以根据业务需求分配 YARN计算节点数量。 这里首先介绍一些前置知识&#xff1a; YARN中 ResourceManager 和 NodeManager是两个核心组件&#xff0c;其中 ResourceManager负责集群资源的统一管理…

【java数据结构】模拟二叉树的链式结构之孩子表示法,掌握背后的实现逻辑

&#x1f4e2;编程环境&#xff1a;idea &#x1f4e2;树结构&#xff0c;以及叶子&#xff0c;结点&#xff0c;度等一些名词是什么意思&#xff0c;本篇不再赘述。 【java数据结构】模拟二叉树的链式结构之孩子表示法&#xff0c;掌握背后的实现逻辑 1. 认识二叉树1.1 二叉树…