C指针 指针和数组 二维数组的指针 指针应用
直接到变量名标识的存储单元中读取变量的值——直接寻址
通过其他变量间接找到变量的地址读取变量的值——间接寻址
指针变量存放地址
显示变量的地址
指针变量使用前必须初始化,若不知指向哪,可先指向NULL。
指针的解引用——通过指针访问指针指向的值
此*非彼*
int *p=&a; *作为指针的说明符定义变量
*p=1; *间接运算符,用于访问p指向的变量值
pa是指向a的指针变量,pa存放a的地址
只要pa指向a,*pa就是a的别名
利用指针实现两数交换
a和b的地址值分别传给形参x和形参y,执行完语句后形参x指向实参b,形参y指向实参a,形参互换了,但实参并没有互换。
函数指针
result=(*f)(a,b); 已经有了指向的函数
指针的算术运算
++(*p) 先读出p所指向的存储单元的数据,然后数据执行+1操作,输出6,不改变指向
(*p)++ 先读出p所指向的数据,输出5,然后数据执行+1操作,不改变指向
*p++ 单目运算符优先级相同,右结合 ,相当于*(p++) 先使用表达式的值(先使用p取出p指向的存储单元的数),后对p执行+1操作,将p指向下个单元(改变指向)
重要:二维数组的指针
其实,在二维数组中,*(a+i)数组元素并不存在,又是另外一个数组的数组名,也是一个地址值,表示第i行第0列的地址
*p两边的圆括号不能省
int (*p)[3]
指针变量p的类型是int[3]型
a 第0行int[3]类型的元素
用二维数组名对其初始化,二维数组的数组名代表了二维数组的行地址
第二种定义方式:
此处的*a也是二维的定义 *(a+0)+0
表示a[i][j]元素前有i行j列
注意区分行指针与列指针
行指针:p首先指向第0行,然后p+i定位到第i行,然后p+i进行解引用(*(p+i))把行地址转化为列地址,在得到第i行第0列地址后在加j得到第i行第j列地址,在进行解引用得到a[i][j]
列指针:p直接指向了第0行第0列,找出a[i][j]相对于a[0][0]的偏移量,i*n+j
二维数组的应用
空间利用率低,最好引用参差不齐的数组类型
country数组中的每个元素都是一个字符指针,字符数组指针只是保存了这些字符串的首地址
只要用country[i]给出第i个字符串的首地址,即可给出第i个字符串。
访问指针数组指向的字符串和访问二维数组中的字符串方式相同
字符串的排序
物理排序,改变了字符串实际保存的物理位置。
交换的是第i个字符串和第j个字符串的首地址
C指针 指针和数组 二维数组的指针 指针应用的更多相关文章
- Java基本语法-----java数组(一维数组二维数组)
嘿嘿!你们懂的,又是图片,委屈大家了. java数组(一维数组二维数组) [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个"顶"字,你就 ...
- 数据结构 二维数组-->稀疏数组-->二维数组
稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...
- c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配
一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...
- [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组
程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...
- Java 一维数组 二维数组 三维数组
二维数组包含一位数组 三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推. 下面是 一维 二维 三维数组例子 一维数组: int[] array1 ...
- java 获取数组(二维数组)长度实例程序
我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; ...
- php php打乱数组二维数组、多维数组
php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 <?php function shuffle_assoc($list) { if (!is ...
- 剑指offer 1.数组 二维数组中查找
题目描述 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序. 请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含 ...
- php打乱数组二维数组、多维数组
//这个是针对二维数组的!下面针对多维数组的乱序方法<?php function shuffle_assoc($list) { if (!is_array($list)) return $lis ...
随机推荐
- 使用Python3爬虫抓取网页来下载小说
很多时候想看小说但是在网页上找不到资源,即使找到了资源也没有提供下载,小说当然是下载下来用手机看才爽快啦! 于是程序员的思维出来了,不能下载我就直接用爬虫把各个章节爬下来,存入一个txt文件中,这样, ...
- 新概念英语(1-47)A cup of coffee
新概念英语(1-47)A cup of coffee How does Ann like her coffee? A:Do you like coffee, Ann? B:Yes, I do. A:D ...
- mysql批量插入语句执行失败的话,是部分失败还是全部失败
项目开发中,正好遇到这个问题. 将一批从外部第三方接口获取到的数据存储到本地mysql数据库,假设接口返回的数据类型为A,经过A到B的转换规则转换后, 要插入数据库的数据类型为B.那么在A获取到100 ...
- 脱upx壳--初试--单步追踪
脱upx壳--初试--单步追踪 这里的练习题目是reversing.kr 的Easy Crack 我自己用upx加壳工具给它加了个壳,由于原文件逻辑简单,所以用它来练练手 之后用到的工具是IDA和Ol ...
- python编程基础--计算机原理之硬件基础
一.寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果. 1.寄存器的特性: 1)寄存器位于CPU内部,数量很少,仅十四个: 2)寄存器所能存储的数据不一定 ...
- Java-Maven(六):Eclipse中Maven插件的命令操作
之前几个章节学习了maven的概念,及maven插件安装后如何创建工程,那么maven工程中是如何使用maven命令呢?本章节将会学习这个话题. 在pom.xml中配置maven命令插件 如果向在ma ...
- ansible批量加用户
ansible批量加用户 1.生成密码 pip install passlib python -c "from passlib.hash import sha512_crypt; print ...
- eclipse下如何使用Hibernate反转工程生与数据库对应的实体类和映射文件(以MySQL为例)
首先需要为eclipse添加对Hibernate的支持(也就是下载的Hibernate中的jar包),下载方法另查,这里不多做阐述. 想要使用反转工程,首先要下载Hibernate反转工程的插件Jbo ...
- 【转】C++ STL快速入门
转自:https://www.cnblogs.com/skyfsm/p/6934246.html 冠军的试炼 悟已往之不谏,知来者之可追 博客园 首页 新随笔 联系 订阅 管理 随笔 - 60 文章 ...
- Jmeter启动问题总结
下载下来的jmeter文件,双击jmeter.bat文件打开的时候,系统提示如下: 查询安装的环境,java的jdk存在,并且版本在1.7以上,详情如下: 在环境变量PATH中添加:%SystemRo ...