对二维数组使用指针进行操作的探索(C语言)
/*
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语言)的更多相关文章
- C指针 指针和数组 二维数组的指针 指针应用
直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C++笔记-数组指针/二维数组转换指针
参考资料: 1. 作者 BensonLaur :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- c语言编程-----指向二维数组的指针
c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...
- 二维数组和指针(C语言)
二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...
- C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
随机推荐
- Matlab之数据处理
写在前面的,软件不太强大,每次保存都需要生成rec和dark的文件,在处理是只需要一个就行了,所有网上查看了下运用批处理的命令去掉多余的文件: 解决办法:windows命令模式下CMD进入文件的目录, ...
- 11个炫酷的 Linux 终端命令
我已经用了十年的Linux了,通过今天这篇文章我将向大家展示一系列的命令.工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我. 1.命令行日常系快捷键 如下的快捷方式非常有用,能够 ...
- php 出现空格,换行原因
1.空格:转换成utf-8无bom格式 2.空格:<?php ?>标签结尾有中文,英文空格 3.换行,一个文件中有多个<?php ?>标签,标签间隔中有换行符合
- SQL Server DBA SQL
. 监控事例的等待 ,,)) "Prev", ,,)) "Curr",count(*) "Tot" from v$session_Wait ...
- 微软高性能缓存AppFabric (一) 安装
博客原文链接:http://www.cnblogs.com/Qbit/p/6088703.html AppFabric 缓存功能的前身是VeloCity ,它是基于windows平台的一个高速内存缓存 ...
- linux 命令——28 tar
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大.tar命令可以为linux的 ...
- 【51nod1443】路径和树(堆优化dijkstra乱搞)
点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...
- python_19_编码解码
msg="我爱北京天安门" #字符串转成Byte类型 print(msg.encode())#encode 编码 print(msg.encode(encoding="u ...
- OO2019第四单元作业总结
一.本单元两次作业的架构设计 1.第一次作业 第一次作业由于时间仓促,没有过多的架构设计,就直接补全了所给的MyUmlInteraction类,导致整个程序的代码风格和效率都不高,在强测中也因此失掉 ...
- mongo 4.0以下版本 类型转换
.文档格式 "Values" : [ { "key" : "姓名", "value" : "jenny&quo ...