/*
Name: 对二维数组使用指针进行操作的探索
Copyright:
Author: lingr7
Date: 01/12/18 11:55
Description:
*/
#include<stdio.h>
int main() { int a[][] = {{,,},{,,}};
int **p = a;/*这一步,将a存放的地址赋值给了p,这一步是的p与a完全等价*/
int *p2 = p;/*这一步就将a[0][0]的地址确实地存入了p2,
与int *p2 = a;语句完全等价,同时进行了强制转换*/ printf("a[1][2]的值:%d\n", *(p2 + * + ));/*对二维数组访问成功*/
printf("a[1][2]的值:%d\n", *((int*)p + * + ));/*访问成功*/
printf("a[1][2]的值:%d\n", *((int*)a + * + ));/*对二维数组访问成功*/
/* 既然(int*)a与 *(int(*)[3])a在这里是等价的,那么还是(int*)a更方便一点*/
printf("a[1][0]的值:%d\n", *(*(int(*)[])a+*+));/*访问成功*/
printf("a[1][0]的值:%d\n", *(*(int(*)[])p+*+));/*访问成功*/
/*以上能够正确的访问二维数组*/ printf("a[1][0]的值:%d\n", *(a+*+));/*这里因为a的地址的多重性而混乱,必须强制转换确认
a是一个指向整型元素的指针,才能正确使用a里存放的地址*/
printf("a[1][0]的值:%d\n", *(*(int(*)[])p+*+));/*p与a的效果完全一样*/
/*printf("a[1][0]的值:%d\n", *(*(int*)p+1*3+0));/*编译不通过*/
printf("a[1][0]的值:%d\n", *((int*)*p+*+));/*操作失败*/
printf("a[1][0]的值:%d\n", *((int*)(*p)+*+));/*操作失败*/
printf("a[1][0]的值:%d\n", *(p+));
printf("*p应该是一个指向指针的指针:%d", *p);
printf("\n");
printf("a的地址:%d\n", a);
printf("a[0][0]的地址:%d\n",&a[][]);
printf("a[0][0]的值:%d\n", *p);
printf("a[1][2]的值:%d\n", *(p + * + ));/*这里和int *p = a的结果不同*/
printf("a[1][2]的值:%d\n", *p + * + );/*21,这里应该是5才对啊
这里跟对二维数组的操作无关,因为*p指向一个指向整型的指针,可是*P移位根本不确定,*P移位后指向什么东西*/
/*printf("a[1][2]的值:%d\n", *(*p + 1*3 + 2));/*存储地址为21的东西没办法输出*/
printf("a[0][0]的值:%d\n", *(p+));
printf("p+1之前:%d\n",p);
p++;
printf("p+1之后:%d\n",p);/*地址+1,实际上是10进制加8了,这是因为p是一个指针,+1之后是下一个
而p指向一个指针,对p移位所以是下一个存储地址长度,与p指向的那个指针指向的类型无关*/ }

对二维数组使用指针进行操作的探索(C语言)的更多相关文章

  1. C指针 指针和数组 二维数组的指针 指针应用

    直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...

  2. 程序员之--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 ...

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

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

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

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

  5. C++笔记-数组指针/二维数组转换指针

    参考资料: 1. 作者 BensonLaur  :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...

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

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

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

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

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

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

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

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

随机推荐

  1. php允许被跨域ajax请求

    只要在被请求端,加一句: header('Access-Control-Allow-Origin: *');

  2. 解惑好文:移动端H5页面高清多屏适配方案

    背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范 ...

  3. git 使用流程 命令

    克隆远程分支到本地 git clone <https://github.com/cqzyl/methods.js.git> 进入master分支 git checkout master 以 ...

  4. h5新增属性本地存储

    ---恢复内容开始--- 存储的两种类型: localStorage 和 sessionStorage localstorage:没有时间限制的数据存储 sessionStorage  针对一个ses ...

  5. jquery中的置顶,置底,向上,向下的排序功能

    css .selectedLi{background: #f0ad4e;color:#fff;} html部分 <ul class="seetSelect2" id='sys ...

  6. Struts2笔记2

    一.请求参数封装 1.属性驱动:     (1).无实体类情况:属性和动作类在一起         a.编写jsp页面,提交数据,例如name和age            <form acti ...

  7. .gitignore梳理

    参考来源: https://www.cnblogs.com/kevingrace/p/5690241.html 对于经常使用Git的朋友来说,.gitignore配置一定不会陌生.废话不说多了,接下来 ...

  8. c#中反射技术在Unity中的运用

    反射技术给类赋值的好处就是可以简化代码,封装的好处就显而易见了.最直接的用途就是用在在显示配置文件的时候,个人习惯性做法是做一个VO来存储需要的数据,其代码如下: internal class Bas ...

  9. centos7.3.1611安装及初始配置

    安装前规划: 主机名称 网络配置 分区配置 分区配置 自定义分区,标准分区 /boot 200M (可选) swap 内存1.5倍到2倍(不大于8G) / 根分区(100G到200G) 其余的备用(数 ...

  10. display:table的几个用法(元素平分宽度,垂直居中)

    DIV+CSS的布局已经让表格布局几乎很少用到,除非表格语义性很强的情况. display:table解决了一部分需要使用表格特性但又不需要表格语义的情况, 尤其是DIV+CSS很不方便解决的问题,比 ...