2 shinokisu Shinokisu 于 2015.06.28 09:15 提问

有一个关于整型指针二维数组的问题

int x[4][4],y[4][4],z=0,o=0;//z表示的是当前矩阵中的非零数字的数量,z为16则说明数字排满了,本局输了
//o表示最大数字的值,本例设定的是1024
typedef int row[4]; //row代表具有4个元素的整型数组
row p=x, *q=y;//P是整型指针数组,有4组,每组有4个元素。p[1]=x[1]=(x+1)

这是别人写的2048源码的一部分,想问一下,这里为什么要先定义一个有4个元素的整型数组,然后再用这个去定义一个指针然后取二位数组的首地址
如果我这里去掉
typedf int row[4]
然后直接
int *p=x
这样能表示二位数组吗?和上面的那种方式有什么区别呢_?

3个回答

StringLoveMe
StringLoveMe   2015.06.28 09:59

个人感觉没有什么区别吧,你可以改一下试试吗。

Shinokisu
Shinokisu 我已经试过用我说的方法改过了,然后会出现很多错误,我不知道为什么,所以没办法把程序运行起来。
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.28 10:39

两个办法都可以,用指针的话,需要动态分配内存
int * p = new int[row * column];

Shinokisu
Shinokisu 回复caozhy: 好,谢谢你的帮助
大约 3 年之前 回复
caozhy
caozhy 回复Shinokisu: 不是函数,是C++的运算符。详细自己google下。
大约 3 年之前 回复
Shinokisu
Shinokisu 回复caozhy: new delete 是怎么样的函数呢?
大约 3 年之前 回复
caozhy
caozhy 回复Shinokisu: 可以,不过最好用new delete,free有天生的缺陷,需要自己控制释放内存的大小,稍有不慎会造成内存泄漏。
大约 3 年之前 回复
Shinokisu
Shinokisu 我是用VC写的,C语言,如果我要分配给指针是这样写吗?int *p=(int *)malloc(sizeof(int));这样写吗?
大约 3 年之前 回复
caozhy
caozhy 回复Shinokisu: C语言只能用malloc
大约 3 年之前 回复
Shinokisu
Shinokisu 回复Shinokisu: 这个分配内存的方式是怎么样的,我在链表里面看到的动态分配内存是用calloc和malloc的,不理解这个。
大约 3 年之前 回复
caozhy
caozhy 回复Shinokisu: 指针不会分配内存。
大约 3 年之前 回复
Shinokisu
Shinokisu 为什么需要动态分布内存呢,int * p = new int[row * column];
大约 3 年之前 回复
JgBoy_cgr
JgBoy_cgr   2015.06.28 11:45

一维数组与二维数组在使用指针是不一样的

Shinokisu
Shinokisu 好,谢谢你的帮助
大约 3 年之前 回复
JgBoy_cgr
JgBoy_cgr 回复Shinokisu: 不好意思题目看错了,typedf int row[4]与int _*p=x_ 的区别在于前者的意思是将row定义为整形数组,而后者的意思是定义一个整形的指针变量,且后者不能表示数组,而前者可以,数组与变量之间同的不了,数组可以限制范围而变量不可以
大约 3 年之前 回复
Shinokisu
Shinokisu 能讲讲区别在哪里吗?
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
指针类型:指向3行4列的整形二维数组
int a[3][4], *p, i; p = &a[0][0]; for (i = 0; i < 12; i++) { p[i] =i; } int (*pnum)[3][4]=&a;//赋a的地址 printf("%d\n", (*pnum)[1][3]);//要加*,要加括号,
指针笔试题
区分指针数组的好方法   2008-04-28 01:17:57|  分类: Linux & C|举报|字号 订阅 a) 一个整型数(An integer)  b)一个指向整型数的指针( A pointer to an integer)  c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to a
定义1个3 * 2的二维数组a,数组元素的值由下式给出,
定义1个3 * 2的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。 a[i][j] = i + j (0&amp;lt;=i&amp;lt;=2, 0&amp;lt;=j&amp;lt;=1) **输出格式要求:&quot;%#include&amp;lt;stdio.h&amp;gt; main() { int a[3][2], i, j; for (i = 0; i &amp;lt; 3; i++) { fo...
例8.12 有一个3×4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值。
解题思路: 二维数组的元素是整型的,它相当于整型变量,可以用int*型指针变量指向它 二维数组的元素在内存中是按行顺序存放的,即存放完序号为0的行中的全部元素后,接着存放序号为1的行中的全部元素,依此类推 因此可以用一个指向整型元素的指针变量,依次指向各个元素 #include int main() {int a[3][4]={1,3,5,7,9,11,13,15,17,19,
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数 正确答案: D   你的答案: D (正确) int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int); 添加笔记 求解答(7) 收藏 纠错
写一函数,将一个3*3的整形矩阵转置 (指针)
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 刘同宾 * 完成日期:2012 年 12 月 06 日 * 版 本 号:v1.0 * * 输入描述: * 问题描述:写一函数,将一个3*3的
用行指针为函数形参来实现对该二维数组求最大值
注意:二维数组名是行指针 /* 定义一个二维数组,写函数来实现对该二维数组求最大值。 (要求,用行指针为函数形参) */ #include using namespace std; void input(int (*p)[4],int n); void output(int (*p)[4],int n); int max_Array(int (*p)[4],int n);
三种方法进行二维数组遍历输出---下标法、行指针、列指针
/* 二维数组遍历输出(3种方法) (1)下标方法 (2)列指针方法 (3)行指针方法 */ #include using namespace std; void output_Subscript(int p[][4],int n); void output_Line(int p[][4],int n); void output_Column(int *p,int n);
C++之指针指向二维数组
一维指针通常用指针表示,其指向的地址是数组第一元素所在的内存地址,如下int ary[4][5]; int(*aryp)[5] = ary;那么ary[4]相当于int(*aryp),以下理解如此,但参数传递需要知道实参所在 的一维个数,所以传递的时候应该传递多一个参数,子数组的引用可以理解 为(*p),那么取元素就是(*p)[i],如下void printVal(int(*aryp)[5],i
有一个二维数组整形数组中,每一行都有一个最大值,编程求出这些最大值以及他们的和
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include void main() { int a[3][4] = { { 1, 2, 3, 4 }, { 8, 7, 6, 5 }, { 12, 10, 11, 9 } }; int max, m[3], n[3], k = 0,