关于C语言的指针数组与指针数组的个人理解
一、指针数组与指针数组
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语言的指针数组与指针数组的个人理解的更多相关文章
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- C语言学习004:数组与指针
在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- C语言学习笔记之成员数组和指针
成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下. 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- C语言函数指针变量和指针函数以及指针数组
C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...
随机推荐
- Go-08-函数与指针
Go语言的函数本身可以作为值进行传递,既支持匿名函数和闭包,又能满足接口. 函数声明 func 函数名 (参数列表)(返回参数列表){ // 函数体 } func funcName(parameter ...
- Day11_57_自定义泛型
自定义泛型 package com.shige.Generic; //自定义泛型 public class CustomizeGeneric { public static void main(Str ...
- 【运维--系统】nacos介绍和安装
目录: 简介 安装java 安装mysql 安装nacos 附录 简介 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服 ...
- hdu4685 最大匹配可能性
题意: 给你n个王子和m个公主,每个王子可以和自己喜欢的公主结婚,问你在不影响最大匹配的前提下每个王子都可以去哪些公主. 思路: 所有王子向他喜欢的公主连一条边,然后匹配一遍, ...
- Nmap 扫描器的使用技巧
1.nmap语法 -A 全面扫描/综合扫描 例如:nmap -A 127.0.0.1 扫描指定段 例如:nmap 127.0.0.1-200&nmap 127.0.0.1/24 2.Nmap ...
- WindowsPE 第五章 导出表
导出表 PE中的导出表存在于动态链接库文件里.导出表的主要作用是将PE中存在的函数导出到外部,以便其他人可以使用这些函数,实现代码重用. 5.1导出表的作用 代码重用机制提供了重用代码的动态链接库,它 ...
- c/c++ 指针函数 和 函数指针
指针函数:返回指针类型的函数,定义方法如下: 类型标识符 *函数名(参数列表) 函数指针:指向函数入口地址的指针,定义方法如下: 类型标识符 (*指针名称)(形参列表) 下面我们通过一段代码加深我们的 ...
- 【JavaScript】Leetcode每日一题-二叉搜索树的范围和
[JavaScript]Leetcode每日一题-二叉搜索树的范围和 [题目描述] 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例1: 输入: ...
- 【vue-02】基础语法
插值操作 插值运算符 语法:{{数据}} 插值运算符可以对数据进行显示{{msg}},也可以在插值运算符中进行表达式计算{{cnt*2}}. v-html 希望以html格式进行输出 htmlData ...
- 高性能MySQL-索引
创建索引-高效索引 1.1 索引初体验 1.1.1 介绍 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 索引的作用是做数据的快速检 ...