一、指针数组与指针数组

  1,指针数组

  顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]。

在理解指针数组的使用方式前,我先来说下我个人对数组的理解。

  比如一维整形数组(形如int a[3]),其实是一个具有3个整形元素的变量;二维整形数组(形如int a[4][3]),可将其视为有a[4]和int[3]两部分构成,将a[4]视为一个一维数组,其中包含a[0]、a[1]、a[2]、a[3],每个元素都是int[3]类型,比如a[0]包含a[0][0],a[0][1],a[0][2]三个元素;三维数组以此类推...

  指针数组的元素既然是指针,那么就可以将它的每一个元素指向相同类型的其他元素(比如指向数组)。

  下面举个例子说明指针数组的使用方法  

 1 #include<stdio.h>
2 #include<stdlib.h>
3
4 #define M 4
5 #define N 3
6
7 void main()
8 {
9 int *a[M],b[M][N]; //分别定义指针数组与二维数组
10 int i,j;
11
12 for(i=0;i<M;i++) //为数组赋值
13 {
14 for(j=0;j<N;j++)
15 {
16 b[i][j] = i+j;
17 }
18 }
19
20 for(i=0;i<M;i++) //为指针数组赋值,将其元素指向二维数组的第一维的元素
21 {
22 a[i]=b[i];
23 }
24
25 for(i=0;i<M;i++) //打印出数组
26 {
27 for(j=0;j<N;j++)
28 {
29 printf("%4d",a[i][j]); //a[i][j]可以写成*(a[i]+j)等其他合理的形式
30 }
31 printf("\n");
32 }
33
34
35 getchar();
36 }

  2,数组指针

  数组指针是一个指向数组的指针,形式为  (*a)[N],既可以指向一维数组,也可以指向二维数组。当执行a+1操作时,它会跨过N个单位长度。

下面举例子说明

 1 #include<stdio.h>
2 #include<stdlib.h>
3 #define M 4
4 #define N 3
5
6
7 void main()
8 {
9 int (*a)[N],b[M][N];
10 int i,j;
11
12 for(i=0;i<M;i++)
13 {
14 for(j=0;j<N;j++)
15 {
16 b[i][j]=i+j;
17 }
18 }
19
20
21 printf("利用b[i][j]方式打印数组\n");
22 for(i=0;i<M;i++)
23 {
24 for(j=0;j<N;j++)
25 {
26 printf("%4d",b[i][j]);
27 }
28 printf("\n");
29 }
30
31 a=&b[0];//或者a=b,但前者可能更为准确
32
33 printf("利用a[i][j]方式打印数组\n");
34 for(i=0;i<M;i++)
35 {
36 for(j=0;j<N;j++)
37 {
38 printf("%4d",a[i][j]);
39 }
40 printf("\n");
41 }
42
43 getchar();
44 }

关于C语言的指针数组与指针数组的个人理解的更多相关文章

  1. C语言核心之数组和指针详解

    指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...

  2. C语言学习004:数组与指针

    在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的

  3. Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法

    由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...

  4. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  5. 关于c语言二维数组与指针的个人理解及处理办法。

    相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...

  6. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  7. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

  8. 深入理解C语言中的指针与数组之指针篇(转载)

    前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...

  9. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  10. C语言函数指针变量和指针函数以及指针数组

    C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...

随机推荐

  1. linux中mysql连接不上,服务启动失败等问题解决

    confluence问题解决方式 1)针对confluence访问页面报500与连接失败等问题 首先我们登陆部署confluence的服器 10.15.4.115 2)重启mysql服务,发现重启失败 ...

  2. N 皇后-力扣解题

    n 皇后问题 研究的是如何将 n 个皇后放置在 n*n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案. 每一种解法包含一个不同的 n 皇后问 ...

  3. SQL优化-大数据量分页优化

    百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤 1.添加 select count(*)fro ...

  4. 缓冲区溢出分析第08课:MS06-040漏洞研究——动态调试

    前言 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用. 编写漏洞利用程序的框架 这里我使用的是VC++6.0进行编写,需要将包含有漏洞的netapi32 ...

  5. POJ1611基础带权并查集

    题意:       有一个人生病了,和他一个社团或者间接和他有联系的人都会生病,问一共有多少人生病了. 思路:       比较简单和基础的题,带权并查集中的一种,就是记录更新集合元素个数,这个题目我 ...

  6. 手脱ASPack2.12壳(练习)

    俗话说柿子挑软的捏,练习脱壳还得用加密壳脱 0x01 准备 1.OD 2.ASPack加壳软件 0x02 脱壳实战 查一下壳 OD载入 第一个call,F7进去 第二个call也是F7进去 之后往下单 ...

  7. Intel汇编语言程序设计学习-第六章 条件处理-中

    6.3  条件跳转 6.3.1  条件结构 在IA-32指令集中没有高级的逻辑结构,但无论多么复杂的结构,都可以使用比较和跳转指令组合来实现.执行条件语句包括两个步骤:首先,使用CMP,AND,SUB ...

  8. C++ Socket 简单封装

    以下代码一部分来自于<网络多人游戏架构与编程>, 其它的都是我瞎写的. 备忘. 一个简单的Socket封装,没有做什么高级的操作(比如IO完成端口等等). 1 #pragma once 2 ...

  9. PowerDesigner安装教程

    准备安装 准备好可执行文件.汉化.破解文件 将可执行文件以管理员身份运行: 向导初始化 next 选香港.点同意: 可以默认,如果说这个路径不能用下次就换一个 除了Eclipse全选 全选 好像有个空 ...

  10. thinkphp中常用到的sql操作

    1.清空某表数据: $sql = 'truncate table table_name'; Db::execute($sql );