要点1:指针、数组和复合字面量
时间:2022-07-23
本文章向大家介绍要点1:指针、数组和复合字面量,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一维数组及其指针表示法
一维数组:
int ar[] = {1,2,3} // 直接初始化,编译器自动获取数组大小
int br[3] = {1,2,3} // 直接指定大小
数组的名字ar其实是一个指针:
int *pr = ar;
printf("%dn", pr == ar); // true
printf("%dn", pr+1 == &ar[1]); // true
所以可以通过指针的方式访问数组:
printf("%dn", *(ar+1)); // 2
二维数组及其指针表示法
二维数组:
int ar[][3] = {{1,2,3},{4,5,6}}; // 直接初始化,编译器自动识别大小
int br[2][3] = {{1,2,3},{4,5,6}}; // 初始化时,显示指定大小
注意,定义多维数组的时候,只有第一个[]中可以省略长度,其他都要显示的指定,因为通过ar+1的形式获取第二个元素的地址的时候,需要知道每个元素的长度.
这里的ar和br其实是一个包含2个指针元素的数组,每个指针都指向一个大小为3的int型数组,故可以用如下方式访问:
int (*pr)[3] = ar; // 定义一个指针,类型为int [3],这里要区别于int *pr[3]
printf("%dn", *(*(pr+1)+1)); // *(pr+1)可以取出第2个数组的首地址,所以输出 5
复合字面量
在C99标准以前,对于带数组形参的函数,情况不同,可以传递数组,但是没有等价的数组常量。C99新增了复合字面量(compound literal)。字面量是除符号常量外的常量。例如,5是int类型字面量,81.3是double类型的字面量,'Y'是char类型的字面量,"elephant"是字符串字面量。
下面创建数组的方式和上面创建一维数组的方式等价:
int *pr;
pr = (int [3]){1,2,3}; // C99之前是不允许的
这样在形参带数组的函数中传参更方便:
void sum(const int [], int n);
int s = sum((int []){1,2,3}, 3);
二维的复合字面量可以这么用:
int (*pr)[3];
pr = (int [][3]){{1,2,3},{4,5,6}}; // 和传统二维数组定义方式等价,更方便
- MySQL(二)之服务管理与配置文件修改和连接MySQL
- linux安装mysql
- 黑客真的会毁了比特币吗?
- Java实现Http的Post、Get、代理访问请求
- MySQL(一)之MySQL简介与安装
- 无人值守,检测程序正常运行,遇故障则重启服务
- JS魔法堂:jsDeferred源码剖析
- JavaSE(八)之集合概述
- 浅谈PHP开发与Java开发的优劣势,还不知道学习方向的可以来看看
- KVM+Qemu+Libvirt实战
- 内核级虚拟化技术
- tomcat配置ROOT目录和多站点
- IntelliJ IDEA使用(一)基本设置与类、方法模板设置
- JS魔法堂:从void 0 === undefined说起
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python获取字典值
- 应用程序InetlliJ IDEA不能打开
- yum install空间不足
- prometheus-nginxlog-exporter构建Nginx日志监控
- s3cmd put文件的过程
- Ceph RGW配置Nginx代理出现S3Error: 403 (Forbidden)
- OmniDiskSweeper清理系统文件
- 【Kubernetes】通过ConfigMap修改容器的DNS
- 【Tensorflow 2.x】检验MKL
- kubernetes dashboard insecure配置
- seqtk抽取reads
- Version of Delve is too old for this version of Go【Goland Debug】报错
- python之turtle模块-黄金螺线
- python之turtle模块-生化危机
- Python之turtle模块-饼状图