C和指针---数组

C语言学习—数组指针和指针数组的区别 C语言中数组指针和指针数组的区别 阅读详情

1.下标引用

int array[10];
int ap = array + 2;
说明:
ap[0]:C的下标引用和间接访问表达式是一样的, 对等的表达式是
(ap + (0)),即array[2]
ap+6:对等的表达式是array+8或&array[8]
*(ap + 6):= array[8] = ap[6]
ap[-1]:ap指向第3个元素,使用偏移量-1使我们得到它的前一个元素即array[1]

2.指针的效率

当根据某个固定数目的增量在一个数组中移动时,使用指针变量将比使用下标产生效率更高的代码;
声明为寄存器的指针通常比位于静态内存和堆栈中的指针效率更高;

3.数组和指针

数组和指针并不是相等的,都具有指针值,都可以进行间接访问和下标引用操作;
*区别:
声明数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始地址。
声明指针变量时,只为指针本身保留内存空间,它并不为任何整型值分配内存空间,指针需要人为对其进行初始化。

4.字符数组的初始化

char message1[] = “Hello”;
char *message2 = “Hello”;
前者初始化一个字符数组的元素,而后者则是一个真正的字符串常量

5.指向数组的指针

int vector[10], *vp = vector;
int matrix[3][10], *mp = matrix;
第1个声明是合法的,为一个整型数组分配内存,并把vp声明未一个指向整型的指针,vector和vp具有相同的类型,指向整型的指针。
第2个声明是非法的,matrix和mp不具有相同的类型,matrix并不是指向整型的指针,而是一个指向整型数组的指针
正确的用法:
int (*p)[10] = matrix;使p指向拥有10个整型元素的数组的指针(下标引用的优先级高于间接访问,所以要加括号)

6.作为函数参数的多维数组

作为函数参数的多维数组名的传递方式和一维数组名相同,实际传递的是个指向数组的第1个元素的指针,但是两者之间的区别是多维数组的每个元素是另外一个数组。
声明:
int matrix[3][10];
func2(matrix);
这里参数matrix的类型是指向包含10个整型元素的数组的指针
func2正确的声明:
void func2(int (*mat)[10]);
void func2(int mat[][10]);
错误的声明:
void func2(int **mat);
错误的原因:把mat声明为一个指向整型指针的指针,它和指向整型数组的指针并不是一回事。
第一种形参为二维数组
声明
void function(int a[m][n]);//函数声明
void function(int a[][n]);//不论多少维数组,第一维都可省略。
//凭什么,第二维就不可省略呢?由编译器的寻址方式决定。
调用
function(a);//函数调用 实参直接写数组名!数组名!(重点)。
//(注意)function(a[m][n])或function(a[][n])都不可以!
//话说,写数组名多好,简单轻松。
在函数操控元素

  1. *(a[i] + j) //代表第 i 行 第 j 列
  2. ((a+i) + j) //同上
  3. *((int )a +in +j )//同上,n表示第二维数组长度,即列宽
    //不管怎么样,a[i][j]不被允许。也是由编译器的寻址方式决定。

第二种形参为数组指针
(其实只是 声明定义 与第一种不同,其他一样)
声明
void function(int (*a)[n]);
//不是(int *a[n])(指针数组) ,而是(int (*a)[n])(数组指针);
// 缘由是 [] 的 优先级比 *的大
调用
function(a);//函数调用 实参同样直接写数组名!
//(注意)function(a[m][n])或function(a[][n])同样都不可以!
在函数操控元素

  1. *(a[i] + j) //代表第 i 行 第 j 列
  2. ((a+i) + j) //同上
  3. *((int )a +in +j )//同上,n表示第二维数组长度,即列宽
    //a[i][j]不被允许。由编译器的寻址方式决定。

第三种形参为二级指针
声明
void function(int **a,int n);n表示第二维数组长度,即列宽
调用
function( (int **)a,int n);//实参不能为数组名!与上面相反!有两个 * !
//(注意)function(a)或function((int )a)不可以!
在函数操控元素
((int )a +in +j )//只有一种!n表示第二维数组长度,即列宽
//其他不被允许。由编译器的寻址方式决定。
总结
声明定义(分三种)。
二维数组,数组指针,二级指针。(都是指针)
调用(一对一,二对二)
数组指针,二维数组就写一级指针即 数组名.
二级指针就写二级指针即 (int
)数组名
在函数中操作元素(注意二级指针,只能用最后的方法)

*(a[i] + j) //代表第 i 行 第 j 列
*( *(a+i) + j) //同上
*( (int * )a +i * n +j )//n表示第二维数组长度(列宽)
也就是说 3. 是万能的。

7.指针数组

int *api[10];
下标引用的优先级高于间接访问,api是某个类型的指针,在取得一个数组元素之后,随即执行的是间接访问操作,对数组的某个元素执行间接访问操作后,得到一个整型值,所以api肯定是有个数组,它的元素类型是指向整型的指针。

C语言中指针和数组详解 数组是一种用于存储相同类型数据的集合。数组中的每个元素都有一个固定的位置,并且可以通过索引访问。数据类型 数组名[数组大小];指针是一个变量,它存储另一个变量的地址。数据类型 *指针名;int *ptr;指针和数组是C语言中两个非常重要的概念。通过理解它们的定义、基本操作和相互关系,程序员可以编写出更加高效、灵活的代码。指针和数组的应用场景非常广泛,包括动态数组、函数参数、字符串处理等。在实际编程中,正确使用指针和数组可以显著提高程序的性能和可维护性。 阅读详情

相关推荐

01|无代码开发 | 如何使用Zion实现导航网站制作

以上就是我制作导航网站的心得,分享给大家,作为一个小白想要独立搭建一个网站还是比较困难的,而在Zion不仅可以用可视化的方法进行搭建,甚至还可以一键发布,不用考虑服务器域名啥的问题,真是太方便了。

2301_76262110的博客 1390

C和指针: 第八章:数组

数组和指针不可替换情形:sizeof 和 & 2[array]等价于*(2+(array))等价于*(2+array),该表达式是合法的 下标操作效率永远不大于指针操作 下标 [ ] 优先级高于 * 一维数组数组名是指向数组第一个元素的指针 多维数组数组名也是指向数组第1个元素的指针,但此时的第1个元素表示次级数组。例如,int matrix[3][10],matrix指向第1行,matrix+1指向第2行,*(matrix+1)是指向第2行第1个元素的指针,*(matrix+1)+5是指向第2行.

py431382的博客 203

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2661

C语言数组指针-笔记(十)

一、数组指针概念 1、指向数组的指针 (1)一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既可以指向变量,也可指向数组和数组元素。 (2)所谓数组的指针(数组的名称)是指数组的起始地址,也就是第一个元素的地址。数组的指针是个常量指针。 2、指向数组元素的指针 (1)指向数组元素的指针变量的定义、赋值 如:int a[5] , *p ; p=&a[0] ;//(p=a;) 另外可在定义的同时进行初始化: 如:int *p = &a[0] ;

微末观星 880

最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin

公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可。

S_White_Island的博客 1万+

单片机NTC热敏电阻测温:六种实用电路方案与选型指南

本文详细介绍了单片机系统中NTC热敏电阻测温的六种实用电路方案,包括分压法、恒流源法、RC充放电法、电桥法、频率法及集成专用IC方案,并提供了关键的硬件选型指南和软件处理技巧,帮助工程师实现高精度、低成本的温度测量。

herb5的博客 818

typedef定义数组指针操作一维数组

#define _CRT_SECURE_NO_WARNINGS #include #include #include //定义数组指针变量的方法1 //用数组类型 * void main13() { char *Myarray[] = {"1111", "33333", "aaaa"}; //指针 数组 //数组指针 用一个指针 来指向一个数组 typedef int

Neil_Hao的专栏 896

ArcGIS渔网分割实战:用Create Fishnet快速生成1km×1km网格(附GDP数据分析案例)

本文详细解析了ArcGIS中Create Fishnet工具在渔网分割中的应用,从基础操作到GDP空间分析全流程。通过1km×1km网格的创建与优化,实现经济数据的空间标准化和可视化表达,解决数据融合与分析的三大核心痛点。

weixin_29250403的博客 295

深入理解C语言数组

深入学习C语言数组阅读目录: 1、多角度理解数组 2、数组中几个关键符号 3、从内存角度理解指针访问数组的实质 4、指针与数组的类型匹配问题

邓博学习笔记 820

使用Bigemap下载地图流程

Bigemap地图下载简单流程,临时安排任务简单学习没有深入了解。

TKY666的博客 4846

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2423

C语言--指针和数组

指针就是地址。 指针变量:是个变量,用来存放一个地址编号。(32位下,指针变量是4个字节) 对应类型的指针变量,只能存放对应类型的变量的地址。 扩展:char ch; ch占一个字节,它有一个地址编号,这个地址编号就是ch的地址。 int a; a占4个字节,它占有4个字节的储存单元,有4个地址编号。 指针的定义: 数据类型 * 指针变量名; int *p; (*用来修饰变量的,说明p是个指针变量)。 关于指针的运算符 &:取地址(获取变量的地址)。*:取值(在定义指针变量时起标识作用,除此之外表示

liyaoliy的博客 737

基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战

本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。

2201_76125261的博客 1188

C语言数组之指针数组和数组指针

指针数组指针数组指针数组

weixin_34481217的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【c语言】指针数组和数组指针-解释和用法

数组指针与指针数组: 优先级:()>[]>* 首先我们要说的一个知识点是 int *p[3] 和 int (*p)[3]的区别 int (*p)[3] 因为()优先级高,首先说明p是一个指针,指向一个int型的一维数组, 数组有3个元素,每个元素是一个int型整数 简单来说,就是int (*p)[3]是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已...

Z小旋 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【C语言】指针数组和数组指针的区别

的情况就更好理解了,在这里“()”的优先级比 “[ ]” 高,“ * ”号和 p2 构成一个指针的定义,指针变量名为 p2,int 修饰的是数组的内容,即数组的每个元素。p1 先与 “[]” 结合,构成一个数组的定义,数组名为 p1,int *修饰的是数组的内容,即数组的每个元素。指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在 32 位系统下任何类型的指针永远是占 4 个字节。指针数组可以说成是”指针的数组”,首先这个变量是一个数组。

猫猫的小茶馆 5831

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【C语言】数组和指针

数组和指针,十分全面!!

Qiuhan_909的博客 1万+

C语言指针数组和数组指针详解

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言流程控制语句 C语言数组——一维数组 C语言数组——二维数组 C语言数组——字符数组 C语言中常用的6个字符串处理函

专注于C语言编程干货分享 5674

C语言——指针和数组

理解指针的含义;掌握数组的使用;理解指针和数组的联系

Li27的博客 4900

C语言数组指针和指针数组

其实原因很简单,在 C 语言中,赋值符号“=”号两边的数据类型必须是相同的,如果不同,则需要显示或隐式类型转换。p1 这个定义的“=”号两边的数据类型完全一致,而 p2 这个定义的“=”号两边的数据类型就不一致了(左边的类型是指向整个数组的指针,而右边的数据类型是指向单个字符的指针),因此会提示错误信息。号和 p2 构成一个指针的定义,指针变量名为 p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,如图 1 所示,因此,它是一个指针数组。

AnChenliang_1002的博客 1374

C语言指针,指针数组和数组指针

在初学习指针时,总觉得学不懂,看了很多资料后,才有所了解,这里我们简单讲解一下我对指针的认识。 一、指针是个啥 举个例子,在诊所里,有许多的柜子,里面装着不同的药,小时候经常觉得医生拿药是件很神奇的事。 其实啊,指针也像这么一个个的柜子,只不过里面装着的是每个药的存放地址,而这个地址就是指针,这个指针也就指向了这个特别的药。 二、怎么操作 1 代码如下: #include <stdio.h> int mai

wsh1031166261的博客 1634

C语言-数组指针和指针数组

c语言指针数组基础知识详解

emmmoksb的博客 1590

C语言 指针数组和指向指针的指针

针对自己在学习指针知识的时候比较难理解,特意整理出来,防止后面忘了,也拿出来供大家理解 指针数组的概念: 一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合。 指针数 组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。 指针数组说明的一般形式为:类型说明符 *数组名[数组长度] 其中类型说明符为指针值所指向的变量的类型 指针数组类型表示的是多个指针(一组有...

tingguan的博客 9929

[C语言]指针和数组

指针数组是数组,而数组指针是指针 指针数组是存放指针的数组,数组指针是指向数组的指针。

2303_77060768的博客 1466

【C语言】_指针数组和数组指针

类比整型数组,即存放整型变量的数组;字符数组,即存放字符变量的数组;指针数组即存放指针变量的数组;// p1先与[]结合// p1为指针数组:存放指针的数组// p2先与*结合// p2为数组指针:指向数组的指针注:(1)[ ] 的优先级高于 * ,定义数组指针需对* p外加括号;(2)去掉变量名即可获取变量类型:对于p1:类型为 int* [10],即指针数组;对于p2:类型为 int(* )[10],即数组指针;

m0_63299495的博客 1289

【C语言】数组指针和指针数组的用法、区别

数组指针和指针数组,从字面上区分的方法就是:本质看最后两个字。例如数组指针的本质就是一个指针,一个指向数组的指针;而指针数组的本质就是一个数组,一个成员都是指针的数组。 1.数组指针 1.1 基本概念 数组指针,即指向一个数组的指针。可以指向一维数组,也可以指向二维数组(三维及以上数组一般不用)。 1.2 定义格式 int (*p)[n]=NULL; p = 数组名; //当数组是一维数组时,直接写数组名编译器会警告,但是运行正常。写成“&数组名”不会警告。对于二维及以上数组,直接写数组名不会

chengwei1128的博客 1920
上一篇: C和指针---指针
下一篇: C和指针---字符串、字符和字节
ldxFashion
博客等级 码龄6年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值