可以用一个一级指针指向一个二维数组吗?

问题描述

可以用一个一级指针指向一个二维数组吗?

看到书上写的都是二级指针,如int *p[4]等等,

数组不是在内存中的存储是连续的吗,

为什么不用一级指针直接指向第一个元素呢?

解决方案

直接用一个指针,就可以完成指向数组的功能,无论数组是多少维。
只是指向后,如果控制下标需要自己考虑。其实,数组名就可以认为是一个静态的指针。

解决方案二:
建议你读下这篇文章
http://www.cnblogs.com/wanpengcoder/archive/2010/07/17/1779503.html

解决方案三:
数组确实是连续的,但不能用一级指针指向一个二维数组,因为一级指针中存的是值的地址,而二级指针存的是指针的地址。

解决方案四:
就你的例子而言,int *p[4]是个数组,里面有4个整数指针,但这四个指针执向的整数不要求是连续的,可以是离散存储的,所以这不等价于整数的二维数组。

时间: 2024-09-03 18:54:44

可以用一个一级指针指向一个二维数组吗?的相关文章

一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组?

问题描述 一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组? 例:这样一个数组,想定义一个指针的指针,指向它. int arr1[4][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; ps. 这个指针的指针 是 用来传递个函数的. 因为某种要求,需要向函数传递一个二维数组,函数的形参表中定义了 int **. 因此 这个指针的指针一定要能够传递函数,并且函数能够通过它操作二维数组元素. 解决方案 指向二维数组的

c-如何定义一个自增之后在二维数组中移动到下一行的指针?

问题描述 如何定义一个自增之后在二维数组中移动到下一行的指针? 如何定义一个自增之后在二维数组中移动到下一行的指针?如何定义一个自增之后在二维数组中移动到下一行的指针? 解决方案 自增是不能移动到下一行的,自增实现的是++, 解决方案二: 用二重数组,比如 int ** arr; arr += 第一维长度; 解决方案三: int a[m][n]={""}; *a+1;表示下一行; *(a+1):表示下一个元素位置. 若果now<n,移动到x行的当前位置:a[m*x+now]. 解

c语言中怎么把一个大小不确定的二维数组当作参数传入函数中

问题描述 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中,取大神,取大神,取大神 解决方案 用VC++新建一个程序,默认生成的main函数定义如下 int mian(int argc, char* args[]) 这就是一个例子. 解决方案二: 一个表示长度的参数,一个指向二维数组的指针 解决方案三: fun(args[][],int rows,int cols) 解决方案四: void Func(int array[][10]

c语言-双重指针定义动态二维数组

问题描述 双重指针定义动态二维数组 指针符号太多了 求解释每个指针符号 问:?二重指针 太多 求解释一下各个 p=(int **)malloc(sizeof(int *)*line); if(NULL==p) { return; } for(i=0;i<line;i++) { *(p+i)=(int *)malloc(sizeof(int)*row); if(NULL==*(p+i)) { return; } } 解决方案 首先我来看malloc做了什么,申请了一组空间,存放int型指针,返回这

二维数组与指针-C语言二维数组中的*(p+1)的确切含义

问题描述 C语言二维数组中的*(p+1)的确切含义 各位大师们,烦请指教一二吧.如果是在一维数组中,*(p+1)表示p+1这个地址空间或空间中的值,那么在二维数组中,p+1是指向a[1]*(p+1)是a1这个地址中的值啊?可是为什么会是地址呢? 解决方案 二维数组其实是一个小戏法,本质上还是一维数组--二维下标连续构成的数组又连续构成第一维下标.你可以像遍历一维数组那样遍历它 解决方案二: 其实a[2][3]的调用可以看成是两个调用,首先是对a进行[2]操作,然后再对a[2]的返回值进行[3]操

数组 指针-c语言二维数组的指针问题

问题描述 c语言二维数组的指针问题 在WinTC下运行如下代码 #include void main() { char a1[][5]={"ab","cd","ef","ghi","sfs"}; printf("%sn",*(a1+3)); //语句1 printf("%cn",**(a1+3)); //语句2 } 运行结果为: ghi g 但如果将上述语句1中的%s

直观理解C语言中指向一位数组与二维数组的指针_C 语言

一维数组和指针:对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我们

c二维数组名与指针的指针之间的关系

问题描述 c二维数组名与指针的指针之间的关系 int arr[3][4]; 书上说arr是指针的指针. 但是有点问题,为什么arr和arr[0]的值是一样的. 如果它是指针的指针的话,那么arr应该在一个内存空间1中存着arr[0]的地址,这个内存空间也有自己的地址. 但是这个内存空间的地址却与内存空间中存着的地址是相同的... 解决方案 arr的值本身是二维数组的首地址,它存储的内容也是数组的首地址 printf("%p %p ", arr, *arr);// 这2个值一样,它存储的

二维数组传参单层指针的问题

问题描述 二维数组传参单层指针的问题 问题: 本人想写一个函数用来给二维数组赋值,函数原型如下: void Input(uchar row, uchar line, double *array) { uchar count; for(count=0; count<(row*line); count++) scanf("%1f", array+count); } 将1~9数字赋值给数组之后发现数组里的内容为: 不知道为什么,求指教! 解决方案 scanf,输入需要变量的地址,而 a