直接到变量名标识的存储单元中读取变量的值——直接寻址

通过其他变量间接找到变量的地址读取变量的值——间接寻址

指针变量存放地址

显示变量的地址

指针变量使用前必须初始化,若不知指向哪,可先指向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指针 指针和数组 二维数组的指针 指针应用的更多相关文章

  1. Java基本语法-----java数组(一维数组二维数组)

    嘿嘿!你们懂的,又是图片,委屈大家了. java数组(一维数组二维数组) [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个"顶"字,你就 ...

  2. 数据结构 二维数组-->稀疏数组-->二维数组

    稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...

  3. c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配

    一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...

  4. [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组

    程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...

  5. Java 一维数组 二维数组 三维数组

    二维数组包含一位数组  三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推.   下面是 一维 二维 三维数组例子   一维数组: int[] array1 ...

  6. java 获取数组(二维数组)长度实例程序

    我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; ...

  7. php php打乱数组二维数组、多维数组

    php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 <?php function shuffle_assoc($list) {      if (!is ...

  8. 剑指offer 1.数组 二维数组中查找

    题目描述 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序. 请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含 ...

  9. php打乱数组二维数组、多维数组

    //这个是针对二维数组的!下面针对多维数组的乱序方法<?php function shuffle_assoc($list) { if (!is_array($list)) return $lis ...

随机推荐

  1. Python内置函数(16)——ord

    英文文档: ord(c) Given a string representing one Unicode character, return an integer representing the U ...

  2. JS 实现MVC的写法

    案例:当select 下拉选择框值变化时,显示其值(不是文本) 常规写法 <h3>JavaScript no MVC</h3>  <div>   <selec ...

  3. 新概念英语(1-65)Not a Baby

    新概念英语(1-65)Not a Baby Does Jill take the key to the front door? A:What are you going to do this even ...

  4. MYSQL 面试查询系列问题

    表结构: `student`('id'.'name'.'code'.'age'.'sex')学生表 `teacher`('id'.'name')教师表 `course`('id'.'name'.'te ...

  5. Qt编译oci教程

    Qt编译OCI教程 上图oci.dll 不是oci.lib 我很奇怪网上大部分教程都是写的oci.lib,其实大家可以去oracle目录找一下这个文件,看看是不是在这个目录,我找了一下没发现.而lib ...

  6. uva 10870

    https://vjudge.net/problem/UVA-10870 题意: f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n ...

  7. Entry

    Entry(单行输入框)用于获取用户输入的文本. Entry组件仅允许输入一行文本,如果输入过长,那么内容将被滚动,意味着字符串不能被全部看到. from tkinter import * maste ...

  8. vscode设置出错, 无法自动补全

    问题: 之前设置的没问题, vscode重装后, 发现vscode里面的设置还在, 但敲代码却无法识别虚拟环境中的包了, 因此相关的内容也无法自动补全. 解决: 后来发现, 实际上设置没有出错, 但重 ...

  9. YII2框架下使用PHPExcel导出柱状图

    导出结果: 首先,到官网下载PHPExcel插件包,下载后文件夹如下: 将Classes文件夹放入到项目公共方法内. 新建控制器(访问导出的方法):EntryandexitController < ...

  10. 浅谈linux静态库、动态库。

    动态库又叫动态共享文件(.so,Dynamic Shared Objects)和静态库(.a)都是将一些待重用的公共代码打包成一种特殊的重定位目标文件. 在使用时,连接器会将静态库中所有的代码,编译到 ...