对二维数组使用指针进行操作的探索(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. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
随机推荐
- CentOS-7.5 解决ifconfig报错
1.报错信息:-bash: ifconfig: command not found 2.检查IP地址是否设置正常 ip addr 以上说明ip设置正常,如果没有获取到IP地址则设置一个即可,设置i ...
- 《Head First 设计模式》之模板方法模式——冲泡咖啡和茶
模板方法模式(Template) ——在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 好莱坞原则:别调用(打电话给 ...
- swagger + springboot
参考文章: https://blog.csdn.net/xupeng874395012/article/details/68946676/ https://blog.csdn.net/hry2015 ...
- 【MATLAB】画平行于坐标轴的曲线
hold on; ylim=get(gca,'Ylim'); % 获取当前图形的纵轴的范围 plot([4,4],ylim,'m--'); % 绘制x=4的直线 hold off;
- 创建1M-1T的虚拟磁盘(内存盘)——使用破解版 Primo Ramdisk Server Edition v5.6.0
破解版 Primo Ramdisk Server Edition v5.6.0下载: https://pan.lanzou.com/i0sgcne 步骤: 下载并解压后安装“Primo.Ramdisk ...
- IOS 核心动画(Core Animation)
Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它 能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就 可以实现非常强大的功能. Core ...
- Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
A[i][j]表示在循环节下标i开头j结尾的最长不减子序列,这个序列的长度为p,另外一个长度为q的序列对应的矩阵为B[i][j], 将两序列合并,新的序列对应矩阵C[i][j] = max(A[i][ ...
- python_69_内置函数1
#abs()取绝对值 ''' all(iterable) Return True if all elements of the iterable are true (or if the iterabl ...
- 在Drupal7中创建web接口
Services 模块允许您从一个主要模块后端配置和管理区域启用您 Drupal 站点上自定义构建的内容服务器和服务.该模块中包含的服务允许您调用内容,从 Drupal 的默认和分配的 File.Co ...
- java中利用JOptionPane类弹出消息框的部分例子
转: http://www.cnblogs.com/wangxiuheng/p/4449917.html http://blog.csdn.net/penjie0418/article/details ...