C语言数组篇(二)指针数组和数组指针

数组指针 和 指针数组

这两个名词可以说是经常搞混了

数组指针--> 数组的指针       就是前面讲的 指向数组a的指针p;

指针数组-->存满指针的数组  就是一个数组里面存的都是指针.----> 也是所谓的二级指针

数组指针就不讲了,见一维数组和指针.

那么指针数组呢?

首先,指针数组是 一个数组里面都是指针

第一步,我们需要一个数组

point[10]   //我们定义了一个空间为10的数组

第二步,这个数组是什么类型的? 指针类型的

* point[10]     //区别: int a[10] 中 数据元素是int型的,那我们现在需要指针型的,就把int换成 * .

还没完,第三步,数组里面的每个元素嗾使指针,但是指针就必须指向拎一个内存空间,那么这个空间有多大?

int *point[10]     //表示有一个数组p,里面存放的都是指针类型的变量,然后这些指针都指向int大小的空间.

int *p[10] 就是数组指针.

从这里我们也发现,他的优先级是 以point为中心,从右往左 先p[] --> *p[] --> int *p[]

指针数组就是二级指针.

因为指针数组不单单又有它自己本身,还附带每个指针袁术指向的小空间.那么:

数组的地址是p,从数组数组的第一个元素是*p,第二个元素是*(p+1),第三个是...

那么,第一个元素指针所指向的小空间的内容就是 *(*(p)) 简写成 **p;

所以,对于二级指针**p 来说 p 是数组地址, *p 是数组里面的元素, **p 是数组里面指针指向的数据 .

从另一个角度理解 *p[10] 因为 p[10] 的指针形式是 *p 所以--> *(*p) 也符合定义

 //指针数组的形参 -->二级指针

int func(int **p){
//...
return 0;}

int main(){
//数组指针
int *p[10]; //数组指针
func(p);    //指针数组的实参

}

原文地址:https://www.cnblogs.com/kmist/p/10068816.html

时间: 2024-10-13 19:27:06

C语言数组篇(二)指针数组和数组指针的相关文章

poj 1195 二维树状数组 及二维树状数组模板

http://poj.org/problem?id=1195 求矩阵和的时候,下标弄错WA了一次... 求矩形(x1,y1) (x2,y2)的sum |sum=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1) 二维树状数组讲解:http://blog.csdn.net/u011026968/article/details/38532117 二维树状数组模板: /*========================================

每天一点儿JAVA之数组篇--一维和多维数组的初始化和基本操作

<span style="font-family: Arial, Helvetica, sans-serif;"> * <p>Description: 演示一维数组和多维数组的初始化和基本操作</p></span> * <p>Copyright: Copyright (c) 2014</p> * <p>Filename: myArray.java</p> * @author w王海涛 * @

USACO5.3 IDDFS_强连通_二维树状数组_斐蜀定理_矩形切割

启发式搜索 启发式搜索的主要思想是通过评价一个状态有"多好"来改进对于解的搜索. 方法#1:启发式剪枝 估价函数最简单最普通的用法是进行剪枝.假设有一个求最小代价的一个搜索,使用一个可行的估价函数.如果搜到当前状态时代价为A,这个状态的估价函数是B,那么从这个状态开始搜所能得到的最小代价是A+B.如果当前最优解是C满足C 方法#2:最佳优先搜索 最佳搜索可以看成贪心的深度优先搜索. 与一般搜索随意扩展后继节点不同,最优优先搜索按照估价函数所给的他们的"好坏"的顺序扩

C语言数组篇(五)多级指针和二维数组指针的区别

多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[10] --> 10个空间的数组 * p[10] --> 这10个空间的数组里面存放的数据都是 指针型的数据 int *p[10] --> 数组里面每个指针指向的空间存放的是int型的数据 int *p[10] --> int **p; p: 指针数组的数组名,也是数组的首地址. *p 数组里面存放的指针 **p 数组里面存放的指针 指向的空间 的内容 二维数组指针: 二维数

C语言笔记(二维数组与数值指针)

一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数组来代替.但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程. (3)两者在内存使用效率上是一模一样的. 二.二维数组的第一维和第二维概念 (1)例如 int a[2][5]中,前面的2表示第一维:后面的5表示第二维 (2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,

直观理解C语言中指向一位数组与二维数组的指针

一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

C/C++笔试篇-------二维指针数组、数组指针的用法

1.废话不多说,先上代码: #include <iostream> using namespace std; int main(void) { int v[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; int (*a)[5] = v; //指针数组,指针指向数组 a[5],a[5]里面是int数值 该指针等于v的地址 cout<<(*a+1)<<endl; //*a是v[0][0]的地址. 0x22fe04 cout<<(*a+2)

转: 浅谈C/C++中的指针和数组(二)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址 规则2:下标总是与指针的偏移量

一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

 打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int *p = a; p < a + 10;p++)  //指针类型决定4个字节 { printf("\n%p,%d", p, *p); } getchar(); } 指针数组 #inclu