C语言-一维数组与指针

C语言指针与一维数组 一维数组和指针 举一个超棒的例子: 结果: 从上面可以看出: a相当于&a相当于&a[0]都是数组a[]的起始地址 p=a; 相当于 p=&a[0]; 阅读详情

1 用指针访问数组的三种方式

#include <stdio.h>

int main()
{
    int array[5] = {5, 10, 15, 20, 25};
    int i;
    int * ptr_array = array;
    for(i = 0; i < 5; i++)
    {
        printf("第%d个元素的值为%d\t地址为%p\n", i + 1, ptr_array[i], &ptr_array[i]);
        printf("第%d个元素的值为%d\t地址为%p\n", i + 1, *(ptr_array + i), ptr_array + i);
        printf("第%d个元素的值为%d\t地址为%p\n", i + 1, *ptr_array, ptr_array);
        ptr_array++;    //每次循环都会移动指针,要注意重置指针的位置
    }
    return 0;
}
  • 递增运算符 ++ 比指针 * 和的优先级高,如 *ptr_array ++
  • array 是数组名,也是数组的首地址
  • 数组名不能进行加减操作
  • array 的值和 &array[0] 的值相同
  • 指针变量可以指向数组元素
int * ptr_array = &array[4]; // array[4]相当于*(ptr_array + 4)
int * ptr_array = array + 4;
  • 若指针P1和P2指向同一数组(只有这样相减才有意义),执行P2-P1,结果是P2-P1两个地址距离,即地址数值差除以数组元素长度。
  • 指针可以++,--,或者加上一个数,减去一个数,两个指针相加无意义,相减只有在上一条情况下才有意义。

2 一维数组做函数的参数

2.1 方法一

int func(int arr[], int n);
int func(int [], int); // 在声明时可以省略形参名

2.2 方法二

这种指针形式仍然可以在函数内用arr[n]的形式表示数组元素。

int func(int *arr, int n);
int func(int *, int); // 在声明时可以省略形参名

3 指针自增自减运算

若指针p指向数组a

  • *p++ = *(p++),先引用,再自增
  • *(++p),先自增,再引用
  • ++(*p) = ++a[0],数组元素加1
    若指针p指向数组a中第i个元素
  • *(++p) = a[++i]
  • *(p++) = a[i++]
  • *(--p) = a[--i]
  • *(p--) = a[i--]
深入理解C语言一维数组与指针:数组指针的概念与应用 C语言中,数组名取地址(&arr)会产生"数组指针"(int()[N])而非普通指针(int),二者步长不同。本文通过代码示例详细解析了数组指针的三种定义方法:1)typedef定义数组类型后声明指针;2)typedef直接定义数组指针类型;3)直接声明数组指针变量。重点演示了数组指针的步长特性(偏移整个数组长度)和元素访问方式(*p)[i],帮助解决数组名取地址时的类型不匹配问题。文章包含完整代码及预期输出,适合C语言学习者理解数组与指针的核心差异。 阅读详情

相关推荐

【C语言】指针与一维数组笔记(二)!

目录二、指针能指向数组?为啥?1.指针与一维数组(1)指针变量处理数组(2)数组的地址(3)通过一维数组名所代表的地址存取数组元素(4)通过指针运算符“ * ”存取数组元素(5)通过带下标的指针存取数组元素(6)等价规则2.移动指针及两指针相减运算(面向数组)(1)移动指针(2)两指针相减运算(面向数组)3.指针比较4.指向字符串的指针(1)字符指针(2)字符指针与字符数组的区别①使用字符指针处理字符串②使用字符数组处理字符串(3)删除一个字符串中所有的空格字符 二、指针能指向数组?为啥? 1.指针与一维数

Sakura给爷pwn全场 653

【C语言】一维数组传参

关于一维数组传参时的一些需注意的细节问题

qq_73575817的博客 1249

C语言指针重点难点整理(详解)(包括一维数组,二维数组的元素指针,二维数组的行指针做函数参数,指针数组,行指针数组)

C语言指针重点难点整理(详解)(包括一维数组,二维数组的元素指针,二维数组的行指针做函数参数,指针数组,行指针数组) 笔者学指针之前: 呵呵,听闻指针是C语言的难点,我倒要见识一下,到底有多难 笔者学完指针之后: 我还是收拾行囊,离开吧! 但是,在我的内心经过反复的挣扎,终于我决定,我要战胜它,现在,笔者已经大概弄清楚了指针的知识点,今天周末,刚好整理一下指针的一些难以理解的地方,和一些重点...

ztlzlzl的博客 4051

指针引用一维数组学习

所谓数组元素的指针就是数组元的地址 1. 指针如何引用数组 int a[10] = {1,3,5,7,9,11,13,15,17,19}; int * p; p = &a[0]; 其中数组名 "a" 不代表整个数组,只代表数组首元素的地址。 p = &a[0] 等价于 p = a; 2. 在引用数组元素时指针的运算 当指针指针指向数组元素的时候 可以 p+1 表示指向下一个元素a[1] 如 p+1 p-1 p++,++p; p–,--p 但两个指针相减,如p1-p2(只有

wangwanli000的博客 1691

C语言基础 -35 指针_指针与一维数组

book@100ask:~/C_coding/CH01$ cat arr.c #include <stdio.h> #include <stdlib.h> int main() { int a[3] = {1,2,3}; int i; for(i = 0 ; i < sizeof(a)/sizeof(a[0]); i++) printf("%d ",a[i]); printf("\n"); exit(0); } book@100ask:~/C_c...

我思故我在! 343

C语言:二维数组与一维数组指针的关系

二维数组可以看作是一个数组的数组,通常用于表示矩阵、表格等数据结构。数据类型 数组名[行数][列数];这表示我们有一个包含 3 行 4 列的二维数组,数组中共有 12 个整数。本文详细讲解了 C 语言中的二维数组和一维数组指针的概念和使用方式。二维数组是由多个一维数组组成的,数组元素在内存中是按行优先存储的。一维数组指针是指向数组首元素的指针,可以通过指针运算访问数组元素。二维数组指针可以通过指针访问二维数组的元素,理解二维数组与一维数组指针之间的关系是深入理解 C 语言的关键。

m0_62599305的博客 1012

C语言总结

C语言基础知识总结

m0_63600560的博客 1358

【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。C语言中的指针提供了强大的工具,通过了解和灵活运用指针,我们能够更有效地操作内存,实现复杂的数据结构和算法。二级指针为多级指针的概念提供了基础,而一维数组与指针的结合则在处理数组数据时提供了便捷的方式。在实际编程中,灵活运用这些概念可以让程序更加高效、清晰。

m0_62599305的博客 3772

c语言,一维数组指针

文章目录前言一、一维数组指针的定义:二、一维数组指针的推导及使用:三、补充:总结 前言 今天我们讲一下一维数组指针。 一、一维数组指针的定义: 概述: 数组指针,就是数组类型的指针。数组里面的 每一个元素都是一个地址 。可以让 数组指针指向一个数组的地址 ,通过地址遍历数组的各个元素。 定义一维数组指针的步骤: int a[5] = {4,5,6,7,8}; / / 定义一个数组 int (*p)[5] = &a; / / 定义一个数组类型的指针指向数组a的地址 注意: int [5]是数组类

wuyiyu_的博客 4872

3D高斯溅射融合Gabor滤波器:频率感知如何提升神经渲染效率与质量

在计算机视觉与图形学领域,3D场景重建旨在从多视角图像中恢复真实世界的三维结构与外观。其核心原理是通过优化场景表示,使渲染出的二维图像与输入照片尽可能一致。传统方法在效率与细节保真度间常面临权衡,高频细节(如精细纹理、锐利边缘)的重建尤为消耗算力。频率感知技术为此提供了突破方向,它借鉴信号处理思想,将场景分解为不同空间频率的成分进行针对性建模。Gabor滤波器作为经典的频率-方向分析工具,能有效刻画纹理的局部频域特征。将Gabor的频率选择性与3D高斯溅射(3DGS)这一高效显式表示结合,构成了神经Gabo

weixin_33087827的博客 272

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 712

C语言 一维数组与指针

那么第二组的问题出在哪里呢,如果不对*pint4加括号,打开后就会变成**(pint4+i),那么pint4指向的将不再是目标数组,所以无论怎么进行*操作都不会得到真正的数据。在指针数组中,每个成员都是一个指针变量,它可以对同类型的数据进行存储,在获得真正数据时就是要对此成员进行*操作,例如*p[1],对其进行进一步分析就会变为**(p+1),看起来就像二级指针一样。这里的as其实是数组中第零个元素,正常要写成&as[0],但是&as[0]拆: & *(as+0) ==> (as+0) ==> as。

jia_03的博客 2736

告别底噪和发热:TPA3255的PCB布局与散热设计保姆级教程(附嘉立创EDA文件)

本文详细解析TPA3255 Class D音频功放的PCB布局与散热设计,提供从电源系统分层架构到热管理系统的全流程优化方案。通过实战案例展示如何消除底噪、降低发热,并附嘉立创EDA文件,助力工程师快速设计高性能音频功放。

weixin_29208077的博客 376

新手必知之c语言一维数组与指针

一、简述一维数组与指针 (1)在C语言中,数组是占用一串连续的存储单元。数组中每个元素都可以看作一个变量,因此每个数组元素都有一个地址。 那么:int *p,a[5]={1,2,3,4,5}; 指针p的基类型是int,数组a的各个元素也是int类型的。我们用p=&amp;amp;amp;a[0],将指针p指向数据元素a[0]。由于数组元素在内存中是连续的,因此我们可以通过移动指针p来访问数组中的每一个元素。 (2...

Dxs4396的博客 2951

基于FPGA的数字图像处理-直方图操作【3.3】

对于固定的位宽和图像分辨率来说,这个计算过程是 可定量的,也就是这个归一化系数是已知的。1.直方图累计和 根据数学定义,直方图累加和的定义是小于指定像素的所有像素 的统计值之和。在实际应用中,处理帧缓存是费时费力费资源的一件事情,在许 多情况下,图像的变换比较慢,在这种情况下的一个近似是当建立当 前帧的直方图统计结果时使用从前一帧得到的映射。由测试结果可见,这两幅过曝光和曝光不足的图像,经过均衡化 之后的效果图差别不大,对比度都非常高,设计代码达到了预期的均 衡目的。累加和的计算情况如图6-28所示。

qq_43416206的博客 1125

6.3 节深度拆解:Hermes Agent 多 Agent 协同执行链路的 4 层设计逻辑

拆解 Hermes 多 Agent 协同的 4 层工程化设计(协议层、编排层、执行层、适配层),聚焦协议层的强约束消息 Schema 如何解决 Agent 间语义不一致问题,并提供 `soul.md` 配置、GLM-4.7Flash 结构化输出验证及 v0.13.0/v0.14.0 版本实操避坑指南

weixin_42520239的博客 122

指针与一维数组( c语言)

摘要:C语言中指针与一维数组关系密切。数组名实质是常量指针,指向首元素地址,两者可通过不同语法访问元素(如arr[i]与*(p+i))。指针算术基于元素大小自动计算地址,函数参数传递时数组退化为指针。动态内存分配需使用malloc/free。常见错误包括指针越界、sizeof误用等。掌握这些概念能提升内存管理效率和代码健壮性,特别需注意数组名不可修改、地址连续性等特性。(149字)

一叶之秋的博客 898

LeRobot 官方论文:一个用于端到端机器人学习的开源库

本文介绍了一个名为LeRobot的开源库,旨在解决机器人学习领域的碎片化问题。该库提供了端到端的技术栈,包括统一的机器人中间件API、标准化的数据集格式(LeRobotDataset)、优化的推理栈以及多种最先进机器人学习算法的实现。LeRobot支持多种低成本开源机器人平台(如SO-10X、ALOHA-2等),通过共享中间件实现便捷的遥操作和数据收集。其数据集格式已广泛应用于社区,截至2025年9月已有16,000多个数据集公开共享。该库还支持流式处理大规模数据,降低了研究门槛。在模型方面,LeRobot

2506_90492529的博客 906

C语言——指针与一维数组

其目标是将数组分为两部分,左边部分小于基准数t,右边部分大于基准数t。(大都选择数组第一个元素为基准数t)其结果依旧是一个指针,新的指针是在原来的地址基础上加n * (sizeof(基类型))个字节。两指针相见必须保持类型一致,其差的结果为相差基类型的个数。*(a + 1)表示第一个元素的值,*(a + 1)等价于a[1] ,值为2;p 代表数组首元素的地址,即*p表示数组首元素的值,所以为1;++p表达式加了,p的值也加了1,所以*++p的值为3;p++表达式没加,所以*p++也是首元素的值为1;

2401_84676053的博客 495

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

本示例演示如何在 Gazebo 物理模拟器中设置 Universal Robotics UR10 机械臂和仿真环境。您需要配置一个机器人从树上摘苹果的仿真环境。本示例演示如何利用这些工具箱,使用 Universal Robotics UR10 机械手模拟机器人检测并从树上摘取苹果。Robotics System Toolbox™ - 在 Simulink® 和 Gazebo 中对机械手进行建模、规划和模拟。Navigation Toolbox™ - 生成三维环境的占用图。

机器人控制与仿真应用 4182

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1486

c语言指针与一维数组PPT,C语言课件:9-2指针与一维数组

《C语言课件:9-2指针与一维数组》由会员分享,可在线阅读,更多相关《C语言课件:9-2指针与一维数组(26页珍藏版)》请在人人文库网上搜索。1、第九章 指针,指针与一维数组,2,指针特别适用于访问在内存中连续存储的相同类型的数据。如:一维数组、二维数组等。,int a10; int *p; p = /通常指向首元素,以一维数组为例: 先定义一个指向类型为数组基类型的指针,再让指针指向某个数组元素...

weixin_35554273的博客 216

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

c语言一维数组指针变量,C语言基础-06-指向一维数组元素的指针

一、用指针指向一维数组的元素//定义一个int类型的数组inta[2];//定义一个int类型的指针int*p;//让指针指向数组的第0个元素p=&a[0];//修改所指向元素的值*p=10;//打印第一个元素的值printf("a[0]=%d",a[0]);输出结果:,说明已经通过指针间接修改了数组元素的值,跟指向一个普通int类型变量是一样的。 由于数组名代...

weixin_39978444的博客 2088

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C语言中的指针与一维数组

C语言中,利用指针既可以间接引用单个变量,也可以间接引用数组的元素 什么是指向一位数组元素的指针: 由于一维数组的元素本质上也是变量,因此,每个数组元素都有一个地址(指针)。 例如: int [10],*p,*q; p = &a[10]; q = &a[3]; 可以发现,这种数组元素地址的表示形式略显繁琐。 为了使用方便,C语言规定: 可以用一个一维数组的数组名,来代表这个数组中0...

HEMVER的博客 1731

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c语言-指针与一维数组

原因就是上一轮循环的指针经过偏移最终停到了下标2也就是对应元素3的地址上,再进行一次同样的循环,那么他就会从元素3的地址继续向后偏移,但是我们这个数组的元素只有1,2,3,就导致它后面并没有地址和对应的元素进行访问。这里可以看到,元素1、元素2、元素3的地址分别是FE0C、FE10、FE14,是连续的,每隔一位差4,对应一个int(4个字节)的大小。可以通过指针偏移的方式来访问数组中下一位元素,因为数组元素内存是连续的,每偏移一位,跨度(增量)都是4个字节。数组名=数组首地址=数组的第一个元素的地址;

Heartoxx的博客 492
上一篇: C语言-转义字符注意事项
下一篇: C语言-二维数组与指针
syzdev
博客等级 码龄9年 852粉丝 149原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值