(C)数组,指针

2023-05-16

数组:

int *a[8];指针数组,每个单元存放一个指针。每个指针是占8个字节在64位,32位占4个字节。

int(*a)[8]:数组指针,一个指向数组的指针。

数组定义:由若干个相同类型的相关数据项按顺序存储在一起,构成数组(array) ;数组实际上是同种类型、有序的数据的集合。同一数组中的元素必须具有相同的数据类型,而且这组数据在内存中将占据一段连续的存储单元。

下标值n表示为所在维的数组元素个数,该维的数组下标的上界是n-1;C语言中数组下标下界始终为0。维数是下标的个数。

1.数组名后使用方括号括起来的常数表达式,不能用圆括号。 int  a(10); ×

2.常数表达式表示元素的个数,即数组长度,而不是数组的上界。

3.常数表达式中可以包括常量和符号常量,不能包括变量。如变长数组:不能用输入的数字定义数组的长度。

4.数组必须先定义,然后使用。

5.一维数组元素在内存中的排列顺序是线性排列即连续存储的。

数组的初始化

1.在对全部数组元素赋初值时,可以不指定数组长度。

int  a[5]={1,  2,  3,  4,  5}        可以写成:int a[ ]={1,2,3,4,5}

2.当数组被说明为静态(static)存储类型或外部存储类型(即在所有函数外部定义)时,则在不显式给出初值的情况下,数组元素将在程序编译阶段自动初始化为0。

 static int a[4]        等价于       static int a[4]={0,0,0,0}

二维数组的初始化

1.   int a[3][4]={{1,2,3,4},{5,6,7,8}, {9,10,11,12}};  

2.    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

3.如果对全部元素赋初值(即提供全部初 始数据),则定义数据时对第一维长度可 以不指定,但第二维长度不能省。

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};  等价于     int a[  ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 

一维数组名作函数参数 :使用简单变量作函数参数,能由实参向形参传递一个数据。使用数组名作函数参数,属于“地址调用”能由主调函数向被调函数传递数组的首地址,并能由被调函数向主调函数传递多个数据。

形参和实参都指向了同一个内存,当形参修改时,形参也会改变。这种改变不是形参传给实参造成的(C 语言不允许这种反向的值传递),而是由于 形参和实参两个数组在内存中因指向同一地 址而共享同一段内存造成的。

 sub2()中的数组是局部变量,sub1()是全局。

 杨辉三角形:二维数组实现:

 一维数组实现:

 字符数组:

1.将逐个字符赋给数组中各元素。          char  c[10]={'I','  ','a','m','  ','h','a','p', 'p','y'};

⒉花括号中初值的个数大于数组长度,则按语法错误处理。

3.如初值个数小于数组长度,则只将这 些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。          char  c[10]={'c','  ','p','r','o','g','r','a','m'};

⒋如初值个数等于数组长度,则在定义 时可以省略数组长度,系统会自动根据初值个数确定数组长度。          char  c[ ]={'I','  ','a','m','  ','h','a','p','p','y'};  

字符串在C语言中无字符串数据类型,将字符串作为字符数组处理

字符数组中,第一个字符串结束标志(\0)前的字符串,称为有效字符串。

 用二维字符数组可存放多个字符串,第二维的长度表示字符串的长度,不能省略,应按最长的字符串长度设定;第一维的长度代表要存储的字符串的个数,可以省略。       

1.字符串是采用字符数组来表示的,只是在有效字符串后自动加字符串结束标志'\0'。

2.字符数组不是字符串,只有当字符型一维数组中的最后一个元素值为’\0’时,它才构成字符串。 3.对于一个字符串常量,那么这个字符串常量本身代表的就是该字符串在内存中所占连续存储单元的首地址,是一个地址常量 。

4.如果将字符串赋值给了一个一维数组,那么这个一维数组的名字就代表这个首地址

字符串的输入和输出:

利用循环,逐个字符输入输出。用格式赋%c输入或输出一个字符。

将整个字符串一次输入或输出。用格式赋%s输入或输出一个字符串。

⒈输出字符不包括结束符‘\0’,只作为结 束标志,输出 遇‘\0’时,输出结束。

2.用%s格式符输出字符串时,printf函     数中的输出项是字符数组名,而不是  、数组元素名。 printf("%s",c[0]);        printf("%s",c);

3.如果数组长度大于字符串实际长度,也只输出到遇‘\0’结束 。    

char  c[10]="China";     printf("%s",c);        ==>        China

4.如果一个字符数组中包含一个以上的 ‘\0’,则遇第一个'\0'时就结束 。

字符串处理函数:最好自己实现这些函数

指针:

直接按变量名来存取变量内容的访问方式, 称为直接寻址。

通过指针变量来间接存取它所指向的变量的访问方 式,称为间接寻址。

本质:变量是通过变量地址来访问变量内容的。

int  A,*p;   p=&A;*P和变量A作用是等价的。

 一般情况下,指针变量中的地址是内存中 另一个普通变量的首地址。如果一个指针变量中 存放的是另一个变量的首地址,我们就称第一个 变量是指向第二个变量的指针。

⒈指针变量前面的*号,表示该变     量的类型为指针型变量。不是进 行指针运算。

 ⒉.在定义指针变量时,必须指定基     类型。     是由于指针型变量有运算:使指 针加1;使指针移到下一位置。

⒊.指针变量必须先定义,后使用。    

⒋.由于指针的值就是地址,因此,指针 运算实质上就是对地址的运算。

a=*p++      先运算p++,但为后增运算,因而先将*p的值赋给a,然后p加1。

a=(*p)++    先取*p的值,赋给a。然后将p所指向的变量内容加1。  

字符指针 :

⒈. char str[10 ];   定义的是一个字符数组。

char *ptr;        定义的是一个字符指针。

2. char *ptr="China"; 表示定义字符指针变量ptr,并在定义时用字 符串"China"在内存中的首地址为指针变量ptr 赋初值。

3.char *ptr,str[10]; ptr=“China”;  字符串的首地址赋给了ptr。

⒋char *ptr,str[10]; scanf("%s",str); 用字符指针输入字符串时,必须确保字符指针 事先已指向了一个数组的首地址。ptr=str;

⒌字符数组的数组名是一个地址常量,它的值 是不能改变的,而字符指针是一个变量,它的 值是可以改变的。

⒍字符数组可用于存放字符串,直接通过数组 元素存取字符串属于直接寻址,字符指针则属 于间接寻址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(C)数组,指针 的相关文章

  • Python下实现Tesseract OCR训练字符库(OpenCV-python边缘检测代替jTessBoxEditor手动矫正)

    Python 下实现 Tesseract OCR 训练字符库 xff08 OpenCV 边缘检测代替 jTessBoxEditor 手动矫正 xff09 作者 xff1a 殷越 目录 一 概述二 环境搭建1 下载 Tesseract OCR
  • 【C语言中清空文件的方法】

    C语言清空文件内容 C语言中清空文件的方法 C语言中清空文件的方法 C语言中清空文件的方法很简单 只要以 可写 的方式打开文件 xff0c 就能将这个文件清空 span class token macro property span cla
  • 服务器知识:阿里云ECS实例设置用户root密码、远程连接

    nbsp nbsp nbsp nbsp 阿里云服务器购买之后 新的实例需要设置root登录密码之后才能正常操作 不然就登录不了 重置实例登录密码的时候 适用于在新创建时未设置密码或者忘记密码的情况 对于正在运行的实例 需要在重置实例登录密码
  • 解决chkconfig设置开机启动时出现missing LSB的错误

    0x00 主要原因是脚本不符合LSB tags规范 xff0c 在 bin bash下面添加如下代码即可 以tomcat为例 span class hljs preprocessor BEGIN INIT INFO span span cl
  • 【MinMaxScaler函数】

    会查MinMaxScaler的基本上都应该理解数据归一化 xff0c 本质上是将数据点映射到了 0 1 区间 xff08 默认 xff09 xff0c 但实际使用的的时候也不一定是到 0 1 xff0c 你也可以指定参数feature ra
  • 【forward方法--深度学习】

    1 基本用法 在pytorch中 xff0c 使用torch nn包来构建神经网络 xff0c 我们定义的网络继承自nn Module类 而一个nn Module包含神经网络的各个层 放在 init 里面 和前向传播方式 放在forward
  • 【pycharm查看当前python版本】

    import span class token return type class name sys span span class token function print span span class token punctuatio
  • 【详解Anaconda 、多环境安装多个不同python版本以及根据需要切换python版本】

    前言 本文旨在详细介绍Anaconda 以及 如何在Anaconda上更换python版本 备注 xff1a 根据读者建议 xff0c 这里明确如下 xff1a 标题中的 在Anaconda上更换python版本 实际上是指 xff1a 通
  • PyCharm中多个方法导入包

    一 Python PyCharm和Anaconda的关系 1 Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 虽然Python自带了一个解释器IDLE用来执行 py脚本 xff0c 但是却不利于我们书写调试大量的代码 常
  • 关于pycharm环境和路径配置的介绍

    python解释器路径 python项目解释器路径 用于配置python项目执行的python路径 比如 xff0c 有的项目是运行的是系统python2 7下的环境 xff1b 有的是3 4 xff1b 有的项目使用的是virtualen
  • 【如何快速判断矩阵是否相似对角化】

    快速判断矩阵是否可以相似对角化 关于如何快速判断矩阵是否可以相似对角化的方法 span class token variable span class token variable 96 span 第一步 xff1a 看是不是实对称矩阵 x
  • 【MemoryCompression内存占用过高】

    MemoryCompression内存占用过高 最近笔记本内存 xff08 16G运存 xff09 占用一直在95 43 xff0c cpu占用也在90 43 xff0c 电脑一度无法使用 96 步骤1 96 96 步骤2 96 步骤 96
  • 洛谷 P3366 【模板】最小生成树 (题解+代码)

    题目传送门 xff1a https www luogu com cn problem P3366 题解 xff1a 利用Kruskal算法求解 xff0c 这里大致说下Kruskal算法 对于一个点数为n的生成树而言 很显然 xff0c 想
  • WSL_03 WSL2 从C盘迁移到D盘

    文章目录 1 动机1 查看虚拟机状态 xff0c 并关闭要迁移的虚拟机2 迁移WSL22 1 出现的问题 xff1a 已存在具有提供的名称的分发 已解决 3 设置启动时的默认用户 xff0c 没有设置默认为root参考 1 动机 WSL2默
  • iOS开发:Block传值的运用

    在iOS开发中传值是一个非常经典的方法 有六种传值方式 属性传值 代理传值 Block传值 方法传值 单例传值 通知传值 本章就来分享一下通过Block完成两个不同界面间的传值操作 首先再来了解一下Block 简单一点说 Block就是一段
  • Ubuntu 安装 CUDA and Cudnn

    文章目录 0 查看 nvidia驱动版本1 下载Cuda2 下载cudnn参考 xff1a 0 查看 nvidia驱动版本 nvidia smi 1 下载Cuda 安装之前先安装 gcc g 43 43 gdb 官方 xff1a https
  • 傻傻分不清楚:裸纤、专线、SDH、MSTP、MSTP+、OTN、PTN、IP-RAN

    著作权归作者所有 xff1a 来自51CTO博客作者51CTOsummer的原创作品 xff0c 如需转载 xff0c 请注明出处 xff0c 否则将追究法律责任 xff08 一 xff09 裸纤 裸纤也叫裸光纤 xff0c 运营商提供一条
  • github下载慢的两种解决方式

    1 修改配置文件 cmd ping github com会显示超时 我们只需要绕过dns域名解析就行 打开DNS查询网站http tool chinaz com dns xff0c 搜索github com的域名解析服务 xff0c 选择一
  • ModuleNotFoundError: No module named ‘cv2‘解决办法

    xff08 linux系统 xff09 这里记录一个实验过程中碰到的bug xff1a 我是在linux系统上面使用conda环境 xff0c 且已经下载了opencv python xff0c 但在python文件中import cv2仍
  • mybatis-plus + PageHelper

    一 导入相关依赖 span class token operator lt span span class token operator span span class token operator span mysql 驱动包 span

随机推荐

  • 阿里云端口问题-配置完安全组无效

    Centos7 X安全组配置完成后仍不能访问 xff0c 此时要配置防火墙放行端口才行 使用以下命令打开端口 tcp udp 两种传输层模式 add port 61 端口号 firewall cmd zone 61 public add p
  • Anaconda教程——Ubuntu 平台

    Anaconda 使用教程 Ubuntu 平台 说明 xff1a 对应着 Python 有 2 x 版本和 3 x 版本 xff0c Anaconda 也有 Anaconda2 以及 Anaconda 3 两个版本 xff0c 考虑其流行度
  • ubuntu突然上不去网

    今天ubuntu突然上不去网了 xff08 昨天还行 xff0c 就很神奇 xff09 在一篇博客中找到了解决办法 xff0c 里面给出了三种解决办法 xff0c 详见原文连接 我用的第二种 xff0c 很简单 xff0c 亲测有效 记录下
  • 原理篇1、锂电池充/供电与电量检测

    目录 1 充电 供电电路2 电量检测电路3 电量计算4 关于IIR滤波器设计参考资料资料获取 1 充电 供电电路 键盘上的充电电路原理图 数据手册中的原理图 其中与TP5400 3脚 PROG 连接的电阻用来设置充电电流大小 电阻大小与充电
  • git 配置用户名与邮箱(git篇)

    配置使用 Git 仓库的人员姓名 span class token function git span config span class token parameter variable global span user name spa
  • 华为2288H V5服务器iBMC 安装windows server服务器

    公司有一台2288H V5服务器 xff0c 需要重装 xff0c IT的人走了 xff0c 只能自己去安装了 xff0c 去机房 xff0c 发现已经设置好了iBMC xff0c IP已经和公司网络连在一起 xff0c 可以直接在自己办公
  • 木棒加工问题(贪心+动态规划)

    问题描述 现有n根木棒 xff0c 已知它们的长度和重量 xff0c 要用一部木工机一根一根地加工这些木棒 该机器在加工过程中需要一定的准备时间 xff0c 是用于清洗机器 xff0c 调整工具和模板的 木工机需要的准备时间如下 xff1a
  • 清翔51单片机开发板及原理图-去年购买的

    2019年购买了清翔的51单片机开发板 xff0c 然后开始学习单片机编程及开发 xff0c 学习到2020年7月份 xff0c 基本上学习的差不多了 xff0c 现在开始我要开始写博客了 之前的维修博客暂停
  • 51单片机——蜂鸣器按照次数响起1.0

    写的不知道好不好 xff0c 有什么不对的地方还请指出 xff0c 谢了 本次使用了do while xff0c 听说比单独的while循环速度快 xff0c 具体也不太清楚 xff0c 就按照别人说的了 且蜂鸣器每次响1秒 xff0c 响
  • MCU BSP Driver分层设计

    最近在摸索和学习中发现 xff0c 可以对于MCU驱动使用分层设计思想 这样的设计避免应用层 用户层和功能层直接去操作寄存器了 所有寄存器的操作均在 通用设备驱动层 xff0c 这个层是直接控制MCU的寄存器 哦 xff0c 驱动层里面忘记
  • 基于STM32F10X的GPIO驱动

    完善我的文章 MCU BSP Driver分层设计 xff0c 本次提供GPIO控制驱动 本片完成了GPIO控制驱动操作 本人是基于野火指南者STM32开发板 本驱动基于STM32F10X官方固件库 主程序 int main void WH
  • 基于STM32F10X的GPIO驱动V0.1

    基于上篇 基于STM32F10X的GPIO驱动 增加GPIO的操作功能 xff0c 并且优化提高部分函数效率 最重要的添加了未带操作 xff0c 这样就可以高效的控制GPIO了 3 未解决的问题 xff1a 当前我无法将WHT GPIO P
  • CPU供电(路由器)万用表测量“短路”现象分析

    在维修路由器产品时发现CPU供电1 1V对地阻值50 100 之间 xff0c 在用万用表的蜂鸣档测量时会报 短路 xff0c 本以为是cpu或者供电芯片损坏 xff0c 原来我测量好板子也是这个现象 xff0c 故这个1 1 V cpu供
  • Lenovo ThinkPad T450s更换WiFi模块、指纹模块、维修SD卡针

    本电脑2015年8月份购买的 xff0c 2018年4月份之后开始出现问题 xff0c 首先指纹很难开机 xff0c 很难录入 xff0c 然后就是SD卡不知道什么时候无法使用了 xff0c 由于笔记本不常完也就没太注意 xff0c 最近有
  • 2.4G&5G WiFi 5V供电大短路,维修更换5G芯片

    故障类别 xff1a 无WiFi信号 故障现象 xff1a 漏电 xff0c 无2 4G和5GWiFi 故障描述 xff1a 开机后发现电流比其它板子大一点 xff0c 并且无异常发热情况 附件 xff1a 分析过程 xff1a 根据故障找
  • 路由器不开机——维修更换MT7621AT CPU

    故障类别 xff1a 不开机 故障现象 xff1a 210mA横流不开机 故障描述 xff1a 发现CPU异常发烫不开机 xff0c 其它地方未有发热现象 附件 xff1a 原因分析 xff1a 开机测量各路电压 xff0c 发现均有电压
  • 编译QT 5.9.7 msvcr2013 x86 32位版本

    因为项目需要 xff0c 用到了qt msvcr2013 x86 版本 但是官方下载的qt安装包里面只有x64的 xff0c 因此决定自己编译x86的版本 编译所需要的工具 xff1a qt源码包 xff0c python xff0c vs
  • <C语言>打印 n 阶魔方阵( n 为奇数),魔方阵的每一行、每一列和对角线元素之和都相等

    打印魔方阵 xff0c 首先我们得知道魔方阵的编写规律 xff1a 魔方阵的填充规律如下 xff1a 假设当前创建了一个矩阵 span class token keyword int span matrix span class token
  • 矩阵连乘之求最优值与构造最优解——呕心沥血篇

    矩阵连乘 详细讲解 初次接触dp xff0c 就看到很多位大佬给出自己的见解 xff0c dp算是最难的算法之一吧 xff0c 主要在于灵活度高 xff0c 需要自己推出动态规划方程 100个动态规划方程传送门涉及到dp问题那么for循环一
  • (C)数组,指针

    数组 xff1a int a 8 指针数组 xff0c 每个单元存放一个指针 每个指针是占8个字节在64位 xff0c 32位占4个字节 int xff08 a xff09 8 数组指针 xff0c 一个指向数组的指针 数组定义 xff1a