背景:int *p;int a[10][10];如何让一维指针p指向a[10][10]开辟的内存空间?

正确的方法:

1.开始我用的笨方法是另外开辟一个内存空间int*p=new int [100];

for(int i=0;i<10;i++)

{

for(int j=0;j<10;j++)

{

*p=a[i][j];

p++;

}

}

p=p-100;

这样就另外开辟了100的内存空间,并让p指向了,这个内存区间的起始地址

2.直接p=&a[0][0];

3.p=a[0];这样也行,确实让人费解

4.p=(int*)a;

错误的方法:

p=a;//二维数组的数组名,表示一个指向列值个元素的一维数组的指针变量

拓展方法:

从上面可以看出,这些指针本质上都是指向一种类型(整型的指针),他们之间的转换无非是强制转换,这样都不会有问题,结论就是同类型指针同维数指针之间强制转换都不会有问题,

下面的方法:

int(*pa)[10]=null;

int **pab=(int**)pa;//这里编译没问题,运行有问题

int *p=(int*)pa;//这样编译没问题,运行也没问题,相当于二维转一维

p=(int *)pab;//编译没问题,运行没问题,二维转一维

从上面可以看出,二维指针之间强制转换会出现不可知的问题,而二维强制转一维都不会有问题!

让一维指针指向二维数组空间的方法!相关推荐

  1. 指针数组,数组指针与二维数组剖析

    int *p[3]与int (*p)[3]的区别 *p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一 ...

  2. C语言指针和二维数组

    二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, ...

  3. C语言中的二级指针和二维数组问题

    关于二级指针和二维数组两者差别很大,不可以直接用二级指针传递二维数组 首先来看看二维数组在内存中是如何组织的呢? 一维数组 T arr1 = new T[9]  二维数组T arr2 = new T[ ...

  4. C语言学习之利用指针输出二维数组任一行任一列元素的值

    利用指针输出二维数组任一行任一列元素的值. int main(){int a[3][4];int i,j,x,y;int (*p)[4];//指针变量p指向包含4个整型元素的一维数组printf(&q ...

  5. C语言指针怎么存二维数组,C语言怎么用指针代替二维数组

    1.设p是指向二维数组a[m][n]的指针变量,则有:int*p=a[0];//此时P是指向一维数组的指针.P++后,p指向a[0][1].2.如果定义int(*p1)[n];p1=a;p1++后,p ...

  6. C ++ 指针 | 指针与二维数组_5

    指针与二维数组 根据上面的图,我现在写一些语句,我们一起来判断输出值是多少!! int (*p)[3] = B; print B; 这个会打印多少? 思考一下....... ... ... ... 打 ...

  7. c语言,指针与数组--指针与二维数组2

    指向一维数组的指针   char (*p)[10] ; 指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;    该指针可以指向数组 ,且使用起来效果节本相 ...

  8. 通过指针访问二维数组的三种方法

    下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...

  9. c语言指针怎样代替二维数组,c语言 指针和二维数组

    // 指针和二维数组 #include int main(int argc, const char * argv[]) { int a[3][6]; for (int i=0; i<3; i++ ...

最新文章

  1. java arraylist和list_Java中ArrayList和LinkedList区别
  2. 惠普中国前总裁孙振耀:离开时心痛得哭了出来
  3. 【Vegas原创】“無法解析 equal to 動作的定序衝突”错误的处理
  4. 如果有人问你关系数据库的工作原理,叫他看这篇文章How does a relational database work
  5. 设计模式C++实现(16)——状态模式
  6. idea在目录中前添加目录_[LaTeX Beamer] 为目录项添加页码
  7. keySet和Map.Entry的理解
  8. java合并整形_Java:合并InputStreams(Java: merging InputStreams)
  9. 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?
  10. codeblocks
  11. 【Elasticsearch】搭建Elasitc stack集群需要注意的日志问题
  12. pom.xml中排除quartz包
  13. Linux查看端口使用情况
  14. 孙鑫VC学习笔记:第十一讲 (六) 图形重绘方法二 利用元文件
  15. VTD — 应用于智能驾驶复杂交通场景仿真工具
  16. bzoj 1036: [ZJOI2008]树的统计Count(树链剖分 点权)
  17. 基于HTML5实现的在线3D虚拟试衣系统(试衣间)解决方案
  18. 开源软件安全检查工具
  19. 人工智能之模式识别(一)
  20. php token过期时间,token过期是什么意思

热门文章

  1. Windows-dos命令
  2. 痔疮最佳治疗方法 十人九痔 不必害羞
  3. 程序员如何编写高大上且实用的技术文档--转
  4. java游戏房间匹配_一种游戏房间匹配方法与流程
  5. java学习---类与对象
  6. 将工件模型(stp,stl等)转为均匀稠密点云(pcd,ply)
  7. 合工大路强java第四次作业第5题
  8. maven-jar包的来源
  9. python数据逆透视_利用Python实现数据逆透视
  10. Android中的动画(二)和ButterKnife (黄油刀)