14-数组与指针

2023-11-16

&寻址运算符

*指针运算符

&寻址运算符与*指针运算符

具有相同的优先级,自右向左结合。

int a;

Int *p=&a;

*&a---->a

&*p---->p

 

int *p=&a;  

指针的赋值:

声明的时候:赋值int *p=&a;  

先声明再赋值:int a; int *p;  p=&a;

*p单独出现的时候是数据。

int *p 前面带有数据类型。

 

一、一维数组和指针。

1、一维数组地址。

就是数组第一个元素的地址。

 

1 #include <stdio.h>
2 
3 int main()
4 {
5 int arr[5];
6 printf("%d\n", &arr[0]);
7 
8 return 0;
9 }

 

定义一个指针,把一维数组的首地址&a[0]赋予这个指针ptr,就说ptr指向数组a[5]

一个数组的数组名就是这个数组的首地址。arr[5]    &arr[0] == arr == ptr

 

2、对一维数组进行输入和输出。

A、指针不发生改变。

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     //int arr[5];
 6 
 7     //for (int i = 0; i < 5; i++)
 8     //{
 9         // arr[i] = i + 1;
10     //}
11 
12 
13     //for (int i = 0; i < 5; i++)
14     //{
15         // printf("arr[%d]=%d\n", i, arr[i]);
16     //}
17 
18 
19     int arr[5];
20     int *p = arr;   // int *p=&arr[0];
21 
22     for (int i = 0; i < 5; i++) //i 0-4
23     {
24         //只要指针变量声明完之后   p就是地址   *p就是陪这个地址指向的变量。
25         *(p+i) = i + 1; //arr[0]--*p arr[1]--*(p+1)  arr[2]--*(p+2)
26     }
27 
28      
29     for (int i = 0; i < 5; i++)
30     {
31         printf("arr[%d]=%d\n", i, *(p + i));
32     }
33 }

 

*只有在声明的是时候表示是指针,其他任何情况单独出现*  都表示指针运算符。

 

B、在对数组索引是,指针p发生改变,那么在打印之前必须把p重新指向数组的首地址。

 1 int arr[5];
 2 int *p = arr;   // int *p=&arr[0];
 3 
 4  
 5 /********************************
 6 1: *p         -- arr[0]    1
 7 2: *(p+1)     -- arr[1]    2
 8 3: *((p+1)+1) -- arr[2]    3
 9 ********************************/
10 
11 printf("赋值之前:%d\n", p);
12 
13 for (int i = 0; i < 5; i++) //i 0-4
14 {
15     *p++ = i + 1; //能不能把一到5复制到数组  p是在发生变化的  
16     //在一个表达式里面 p++  就是先计算表达式的值  在给p+1
17     // ++p  先给p+1  再计算表达式的值
18 }
19 
20 printf("赋值之后:%d\n", p);
21 
22 for (int i = 0; i < 5; i++)
23 {
24     printf("arr[%d]=%d\n", i, arr[i]);
25 }
26 
27  
28 p = &arr[0]; //把p重新指向数组的首地址
29 printf("打印之前:%d\n",p);
30 
31  
32 for (int i = 0; i < 5; i++)
33 {
34     printf("arr[%d]=%d\n", i, *p++);
35 }
36 
37 printf("打印之后:%d\n", p);

 

 

建议:遇见指针:1、这个指针的指向类型?  2、这个指针指向哪里?  3、指针自己的类型?

 

二、二维数组和指针。

1、二维数组的地址。

 

 

 

首地址:

&a[0][0]  a[0]  &a[0]  a   &a

 

行地址:

1、0行的地址就是首地址

2、1&a[1][0]   a[1]   &a[1]  a+1

3、第2&a[2][0]   a[2]   &a[2]  a+2

4、第i行  &a[i][0]    a[i]   &a[i]   a+i

蓝色的加法就加一维数组的字节数 橙色的加法加数据类型的字节数

 

通过行地址去找到nm列的元素。

&a[n][m]   a[n]+m  (关键是要搞清楚 以一维数组老做判断 还是以整体的二维数组来进行判断 )

 

//nm列的元素

*(a[n]+m)

*(*(a+n)+m)   //a+n  a[n]  *(a+n)   a[n]+m

 

下节课:

字符串和指针(数组和指针)  指针类型的数组

函数和指针

指针总结

结构体

预处理

位运算

数据结构

写项目

 

 

 

转载于:https://www.cnblogs.com/tiantiancode/p/11131766.html

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

14-数组与指针 的相关文章

  • 算法:双指针

    双指针 双指针是一种思想或一种技巧并不是特别具体的算法 具体就是用两个变量动态存储两个结点 来方便我们进行一些操作 通常用在线性的数据结构中 特别是链表类的题目 经常需要用到两个或多个指针配合来记忆链表上的节点 完成某些操作 常见的双指针方
  • 数据库多维迭代算法

    关键词 数据库 迭代 递归 多维 一 两种传统的数据库迭代结构算法 对于数据库的迭代结构 有两种传统的算法 递归算法和边界算法 比如对于下面图1的结构 图1 递归算法的数据结构如表1所示 节点id 节点值 父节点id 1 1111 2 3
  • 50个c/c++源代码网站

    C C 是最主要的编程语言 这里列出了50名优秀网站和网页清单 这些网站提供c c 源代码 这份清单提供了源代码的链接以及它们的小说明 我已尽力包括最佳的C C 源代码的网站 这不是一个完整的清单 您有建议可以联系我 我将欢迎您的建 议 以
  • Mysql 数据库

    数据库基础 1 什么是数据库 用来存储数据 数据库可在硬盘及内存中存储数据 数据库与文件存储数据的区别 数据库本质也是通过文件来存储数据 数据库的概念就是系统的管理存储数据的文件 数据库介绍 本质就是存储数据的C S架构的socket套接字
  • 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.29. Coreutils-8.23...

    Coreutils 软件包包含用于显示和设置基本系统特性的工具 大概编译时间 2 5 SBU 需要磁盘空间 193 MB 6 29 1 安装 Coreutils POSIX 要求 Coreutils 中的程序即使在多字节语言环境也能正确识别
  • 算法--将数组分成和相等的多个子数组,求子数组的最大个数

    作者 陈太汉 一个整数数组 长度为n 将其分为m份 使各份的和相等 求m的最大值 比如 3 2 4 3 6 可以分成 3 2 4 3 6 m 1 3 6 2 4 3 m 2 3 3 2 4 6 m 3 所以m的最大值为3 算法 原理的思想是
  • 树06--二叉树中和为某一值的路径

    树06 二叉树中和为某一值的路径 jz24 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 输入一颗二叉树的根节点和一个整数 按字典序打印出二叉树中结点值的和为输入整数的所有路径 路径定义为从树的根结点开始往下一直到叶结点所经
  • 直线检测方法—LSD论文翻译

    附原文链接 LSD a Line Segment Detector 摘 要 LSD是一个线段检测器 能够在线性时间内得到亚像素级精度的检测结果 它无需调试参数就可以适用于任何数字图像上 并且能够自我控制错误数量的检测 平均来说 一个图像中允
  • 第二十八节、基于深度学习的目标检测算法的综述(附代码,并附有一些算法英文翻译文章链接))...

    在前面几节中 我们已经介绍了什么是目标检测 以及如何进行目标检测 还提及了滑动窗口 bounding box 以及IOU 非极大值抑制等概念 这里将会综述一下当前目标检测的研究成果 并对几个经典的目标检测算法进行概述 本文内容来自基于深度学
  • 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 前置知识 1 算法稳定性 在一个序列中 能保证两个相等的数 经过排序之后 其在序列的前后位置顺序不变 A1 A2 排序前 A1 在 A2 前面 排序后 A1 还在 A2 前面 2 时间复杂度 时间复杂度是用于衡
  • 递归算法中的时间复杂度分析

    对于一种算法的时间复杂度分析还是特别重要的 在一些非递归算法中 我们仅仅看运算次数最多的那一行代码可能执行多少次就可以 实际就是看在循环中变量的变化 但是对于递归算法中该怎么分析呢 下面介绍几种递归函数中的算法时间复杂度分析的方法 0 递推
  • 字符串09--表示数值的字符串

    字符串09 表示数值的字符串 jz53 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值
  • JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候 去了一家公司面试 面试官现场考了我这道题 我记忆深刻 当时没有想到思路 毫无疑问被面试官当成菜鸟了 最近刚好在研究数组的各种算法实现 就想到这道题 可以拿来实现一下 纪念自己逝去的青春 需求 假设有这样一个数
  • 人工智能概念

    人工智能概念 人工智能就是用人工方法在机器 计算机 上实现的智能 或称机器智能 即是研究如何用计算机来表示和执行人类的智能活动 以模拟人脑所从事的推理 学习 思考和规划等思维活动 并解决需要人类的智力才能处理的复杂问题 如医疗诊断 管理决策
  • 【试题】排列组合

    在写一个远程的代码 如果本地有M个显示器 远程有N个显示器 M lt N 依据分辨率 显示器刷新频率等要求 需要对远程的N个显示器进行最佳分辨率修改 之后 需要从N个远程显示器中选择M个 跟本地显示器进行一对一的匹配 即从 A N M N
  • 插入排序超详解释,一看就懂

    目录 一 插入排序的相关概念 1 基本思想 2 基本操作 有序插入 二 插入排序的种类 三 直接插入排序 1 直接插入排序的过程 顺序查找法查找插入位置 2 使用 哨兵 直接插入排序 四 直接插入排序算法描述 五 折半插入排序 1 查找插入
  • 数组实现循环队列(增设队列大小size)

    目录 一 前言 1 如何实现循环 2 如何判断队列为空 3 如何判断队列为满 二 循环队列的结构定义 三 循环队列的创建及其初始化 四 入队 五 出队 六 取队头元素 七 取队尾元素 八 循环队列判空 九 循环队列判满 十 循环队列销毁 一
  • 【数据结构】单链表的定义和操作

    目录 1 单链表的定义 2 单链表的创建和初始化 3 单链表的插入节点操作 4 单链表的删除节点操作 5 单链表的查找节点操作 6 单链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助
  • 按照层次遍历结果打印完全二叉树

    按照层次遍历结果打印完全二叉树 按照推论结果 l 层首个节点位置 2 h l 1 l 层节点间距 2 h l 1 1 编码实现 public static
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • Java基础6--对象和类

    Java基础6 对象和类 文章目录 Java基础6 对象和类 概念 Java中的对象 Java 中的类 构造方法 创建对象 访问实例变量和方法 Java 内部类 非静态内部类 静态内部类 从内部类访问外部类成员 import 语句 概念 对
  • 异步编程CompletableFuture系列3 接口合并

    直接上代码 import java util concurrent CompletableFuture import java util concurrent TimeUnit public class Test3 public stati
  • 没有找到MSVCR90D.DLL的两种解决方法

    1 没有找到MSVCR90D DLL的简单解决方法之一 在VS2005 2008下写C C 程序时 偶然会出现这样的错误 这样的错误一般会出现在第一次运行项目时 或重装VS后 这里提供一种简单的解决办法 希望对初学者有用 打开项目的属性页
  • 【CCPC-2019】【江西省赛】【霖行】J-Worker

    CCPC 2019 江西省赛 霖行 J Worker 题目 Avin meets a rich customer today He will earn 1 million dollars if he can solve a hard pro
  • python中用pickle打开文件报错:EOFError: Ran out of input

    用pickle dump 保存文件之后如果不关闭文件就会出现此错误 f open test pkl wb pickle dump dict f f close 后面添加关闭就不会报错
  • JAVA - 判断两个浮点数相等

    背景知识 float型和double型是JAVA的基本类型 用于浮点数表示 在JAVA中float型占4个字节32位 double型占8个字节64位 一般比较适合用于工程测量计算中 其在内存里的存储结构如下 float型 符号位 1 bit
  • 基于梯度下降算法求解线性回归

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 01 线性回归 Linear Regression 梯度下降算法在机器学习方法分类中属于监督学习 利用它可以求解线性回归问题 计算一组二维数据之间的线性关系 假设有一组数
  • Solidworks2022-2-软件安装步骤

    Solidworks2022软件安装步骤 1 先确定你的系统是否已经安装了 net 3 5 和 net 4 0 net 3 5 和 net 4 0查看方法 如果 没有或缺少 根据第二张图进行下载或增加一下 2 断开网络连接 关闭保护设置 3
  • Linux_centos7_vi/vim程序编辑器_(6)_(bird_bro)

    参考资料 https studylib net doc 11479665 vi vim graphical cheat sheet q j
  • noj.26 二叉排序树的合并

    题目描述 分析 1 先序 创建二叉排序树 2 在二叉排序树中插入一个值 3 n 大于根节点在右子树中插入 4 n 小于根节点在左子树中插入 5 合并排序二叉树 6 中序输出合并后的排序二叉树 完整代码 include
  • 谈谈react操作onMouseEnter、onMouseLeave结合css里的hover

    react对于每个html元素都添加了很多事件处理函数 这些事件网上一搜就都出来了 这里简单说下在react中利用js进行操作类似于css里的hover所使用的事件 比如这样一个需求 有以下3个div div class a abc a d
  • 在 cocos2d 里面如何使用 Texture Packer 和像素格式来优化 spritesheet

    原文链接 http www cnblogs com andyque archive 2011 03 18 1988097 html 免责申明 必读 本博客提供的所有教程的翻译原稿均来自于互联网 仅供学习交流之用 切勿进行商业传播 同时 转载
  • java开发思路_Java Web开发教程——基本思路

    思路 将需求拆解为基本技术的简单组合 再分别实现 基本技能必须是足够简单且容易理解的 对基本技能的组合 必须是严格相等于需求域的 不能有缺漏 一 基本技能 基础知识 B S Browser Server 就是以浏览器作为用户界面与用户进行交
  • LeetCode 解题笔记(三)字符串

    文章目录 一 基础篇 344 反转字符串 2022 03 06 7 整数反转 2022 03 07 387 字符串中的第一个唯一字符 2022 03 08 242 有效的字母异位词 2022 03 09 总目录 LeetCode 解题笔记
  • Docker部署node.js应用

    前言 什么是docker 通俗的理解 docker是创建和管理容器的一种技术 那什么是容器呢 容器的功能与虚拟机很近似 都是在一个物理主机上运行多个操作系统的技术 最大的不同之处在于 虚拟机技术是虚拟出一套硬件后 在其上运行一个完整操作系统
  • 某银行降低贷款拖欠率的逻辑回归建模

    代码 coding utf 8 Created on Sat Jul 15 17 48 35 2017 author Administrator 逻辑回归建模 import pandas as pd from sklearn linear
  • CA,证书,公钥,私钥,加密算法常识总结

    数据传输安全要满足的要求 发送方能够确定消息只有预期的接收方可以解密 不保证第三方无法获得 但保证第三方无法解密 接收方可以确定消息是由谁发送的 接收方可以确定消息的发送方 接收方可以确定消息在途中没有被篡改过 必须确认消息的完整性 加密和
  • M-estimator M估计法 用于几何模型建立

    M estimators是一类广泛估计函数 定义为所给数据上的最小和函数 最小平方估计和极大似然估计都是M估计法 M估计法由鲁棒的数据作为运行保证 一般地 一个M estimation定义为一个估计函数为0的情况 这个估计函数经常是一些统计
  • 剑指offer试题编程练习11(java) 位运算符的运用

    11 输入一个整数 输出该数二进制表示中1的个数 其中负数用补码表示 首先回顾原码 反码 补码的知识 来自https www jianshu com p 36ec7a047f29 在计算机底层均是以二进制表示的 数字也不例外 下面以8位bi
  • 14-数组与指针

    寻址运算符 指针运算符 寻址运算符与 指针运算符 具有相同的优先级 自右向左结合 int a Int p a a gt a p gt p int p a 指针的赋值 声明的时候 赋值int p a 先声明再赋值 int a int p p