二维数组:

char a[][];

二维数组实质上也就是一维数组,a[2][3]可看做一个2个元素的一维数组,这2个元素又是另一个数组,在内存中,它的排布如下:

#include "stdio.h"

int main(int argc, char *argv[])
{
char a[][]={{,,},{,,}}; for(int i=; i<;i++)
for(int j=;j <;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
for(int i=; i<;i++)
for(int j=;j <;j++)
{
printf("a[%d][%d] Addr=0X%X\n", i, j, (int)&a[i][j]);
}
return ;
}

数组指针:

char a[][]={{,,},{,,}};
char (*p)[]=a; //a为一维数组的数组名,类型为char (*)[3]
char *p=a[]; //a[1]为二维数组的数组名,即{2,4,8}数组的首地址,类型为char *
char (*)p[][]=&a //&a为整个数组的首地址,类型为char (*)[2][3]

二维数组传参:

当定义了char a[2][3]={{1,3,9},{2,4,8}},如何将地址传入到函数中呢。函数对a数组进行修改呢。

void Func(int (*array)[10]);  注意*array需要用括号括起来。

这种形式的传参是1个指针,指向10个元素的数组,因为[]的优先级比*的优先级高,故*array必须用括号括起来。

#include "stdio.h"
void exchange(char (*p)[]); int main(int argc, char *argv[])
{
char a[][]={{,,},{,,}}; for(int i=; i<;i++)
for(int j=;j <;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
printf("exchange\n");
exchange(&a[]);
for(int i=; i<;i++)
for(int j=;j <;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
return ;
} void exchange(char (*p)[])
{
char tmp=(*p)[];
(*p)[] = (*p)[];
(*p)[] = tmp;
}

例子解析:exchange(&a[1])将{2,4,8}数组的首地址传递给exchange,exchange使用(*p)获得{2,4,8}的地址,然后用(*p)[0]、(*p)[1]、(*p)[2]偏移并修改{2,4,8}数组的值。

void Func(int *array[10]);

这种形式的传参是10元素的数组,每个元素都是指向int型的指针。

#include "stdio.h"
void exchange(char *p[]); int main(int argc, char *argv[])
{
char a[][]={{,,},{,,}}; for(int i=; i<;i++)
for(int j=;j <;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
printf("exchange\n");
char *p[];
p[] = a[];
p[] = a[];
exchange(p);
for(int i=; i<;i++)
for(int j=;j <;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
return ;
} void exchange(char *p[])
{
char tmp=p[][];
p[][] = p[][];
p[][] = tmp;
}

例子解析:先使用char *p[2]定义了2个元素的数组,每个元素都是char *型,然后将a[0]和a[1]的地址赋给p[0]和p[1],exchange函数接收到p[2]的地址,使用p[1]就能得到a[1]的地址,然后使用p[1][0]、p[1][1]、p[1][2]偏移到a[1][0]、a[1][1]、a[1][2]。

C语言之二维数组与指针的更多相关文章

  1. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

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

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

  3. C语言 二维数组(指针)动态分配和释放(转)

    C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...

  4. 二维数组和指针(C语言)

    二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...

  5. 程序员之--C语言细节13(二维数组和指针,&amp;*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)

    主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...

  6. c语言编程-----指向二维数组的指针

    c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...

  7. 对二维数组使用指针进行操作的探索(C语言)

    /* Name: 对二维数组使用指针进行操作的探索 Copyright: Author: lingr7 Date: 01/12/18 11:55 Description: */ #include< ...

  8. c语言中双维数组与指针的那点事儿

    说起c语言的指针,估计对c语言只是一知半解的同志们可能都会很头疼,尤其它跟数组又无耻的联系到一起的时候,就更加淫荡了!!! 怎么说呢,就是有一点规定:(或准则) 数组名可以看成是指向数组头元素的指针, ...

  9. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

随机推荐

  1. Unity3D AssetBundle的打包与加载

    在Unity项目开发过程中,当要做热更新时常常使用一个叫做AssetBundle的东西,这里做一点个人的学习记录 步骤1: 设置打包标签:具体步骤----进入Unity,选择某一资源然后看右下角,在那 ...

  2. 编写一个求和函数sum,使输入sum(2)(3)或输入sum(2,3),输出结果都为5

    昨天的笔试题,做的一塌糊涂,题目考的都很基础而且很细,手写代码对我来说是硬伤啊.其中有一道是这个,然而看到题目的时候,根本没有想到arguments:然后现在就恶补一下. arguments:用在函数 ...

  3. DAY6:文件读取

      文件读取: f = open("文件名","r",encoding="utf-8").read()#文件读取 print(f) 写入文件 ...

  4. vue路由的懒加载

    一.懒加载 也叫延迟加载或者按需加载,即在需要的时候进行加载,   二.为什么要使用懒加载 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要 ...

  5. Phone 3rd Recovery

    #解锁之后会低级格式化,请做好相关备份.1.#unlock code#2.adb reboot-bootloader3.fastboot devices4.fastboot oem unlock ** ...

  6. float样式的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【4】数独(Sudoku Killer)(深度优先遍历)

    问题描述:给你多个数独题目,让你输出答案 思路:递归确定每一个‘?’的位置的值,直到所有‘?’都被确定.先将原字符数组转换为整型数组,‘?’由数字0代替,然后每一次层递归找到第一个0的位置,如果找到了 ...

  8. python vtk 通过回调函数监测键盘”Up”键动作,每按一次方向上键,actor变换一种颜色

    import vtk class KeyPressInteractorStyle(vtk.vtkInteractorStyleTrackballCamera): def __init__(self,p ...

  9. element UI 下拉菜单滚动监听(vue指令)

    直接看代码吧,可以直接粘贴此代码到你的编辑器中看效果. <template> <div class="page-component"> <div cl ...

  10. WEB学习笔记6-正确闭合HTML标签

    自闭合标签(空元素,即不能包含任何内容,这些元素对应的HTML标签成为自闭合标签) area/base/br/col/command/embed/hr/img/input/keygen/link/me ...