当前位置: 代码迷 >> C语言 >> 关于指针的问题
  详细解决方案

关于指针的问题

热度:359   发布时间:2007-01-08 21:08:26.0

谢谢各位,但是我还是有点不明白。
书上说指针是一种数据类型,和int double 一样。但是假如现在定义了一个double型的指针,申请了一片地址,把地址给了指针,然后接着把这个地址赋给一个double型的指针,这个时候就有错了,为什么?难道是两个数据变量类型不同就不能互相赋值?那么地址到底是什么数据类型,这里小弟查书,书上又说地址也是一个数据类型,我有点不明白。
doulbe * ipMatrix, *Matrix;
int i;
ipMatrix=(double *)malloc(Row * Col*sizeof(double));
Matrix=(double *)malloc(Row * sizeof(double));
for(i=0;i<Row;i++)
*(Matrix+i)=ipMatrix+i*Col; /*这里有错*/
假如我定义一个int型的二维数组,还是如此定义,再编译,就不会有报错。这是为什么?我怎么感觉这里指针是不是有点我没有理解的东西。
int * ipMatrix, *Matrix;
int i;
ipMatrix=(int *)malloc(Row * Col*sizeof(int));
Matrix=(int *)malloc(Row * sizeof(int));
for(i=0;i<Row;i++)
*(Matrix+i)=ipMatrix+i*Col; /*用double型数据时这里有错,但是改成int型的时候这里就没有错了*/
然后再调用Matrix时就是双层指针了。
谢谢各位,
大家多提自己的想法!


----------------解决方案--------------------------------------------------------


怎么没人关注我的问题了,我还没有明白呢!
请大家再给点解释。
谢谢!


----------------解决方案--------------------------------------------------------
doulbe * ipMatrix, *Matrix;
int i;
ipMatrix=(double *)malloc(Row * Col*sizeof(double));
Matrix=(double *)malloc(Row * sizeof(double));
for(i=0;i<Row;i++)
*(Matrix+i)=ipMatrix+i*Col;//始终没看明白这个是什么意思,ipMatrix是指针,而*(Matrix+i)是数据了啊 这个有什么意义?

按你标题的意思你的matrix是指向ipmatrix的每一行的头一个地址,那你为什么要再创建一块内存?
从你的做法来看你创建了两块内存,ipmatrix和matrix分别指向这两块内存的首地址,我觉得该这样
doulbe * ipMatrix, *Matrix;
int i;
ipMatrix=(double *)malloc(Row * Col*sizeof(double));//row是行,col是列
Matrix=ipMatrix;//把首地址给matrix
for(i=0;i<Row;i++)
{
Matrix = ipMatrix + Col;//ipMatrix + Col就是指针向后跳了COL位,就是下一行的首地址了
.....//某些操作
}
应该是这样吧 再请大大们看看
----------------解决方案--------------------------------------------------------
以下是引用neverTheSame在2007-1-6 16:41:09的发言:

二维数组是一个指向指针类型的指针变量
比如:用指针定义一个[10][10]的二维数就是这样:
float **string=NULL;
int i;
string=(float **)malloc(10*sieof(float *));
for(i=0;i<10;i++)
string[i]=(float *)malloc(10*sizof(float));


这种方法可以.


----------------解决方案--------------------------------------------------------
看了一下渚薰说的方法也不错
但是内存就不是一整块了
数组的话还是一整块比较好 //纯粹个人觉得
----------------解决方案--------------------------------------------------------

首先,谢谢各位关注我的问题!
大家对二维数组指针访问都有自己的想法。
我想我现在知道我犯的错误了,我定义了两个指向浮点数的指针,把第二个指针指向一个指向浮点类型数的指针犯了类型错误,但是定义两个整型指针的时候可以将第二个指针指向一个指向整型数的指针,这说明地址是用整型数表示的,不存在像有些书中说的,地址也是种数据类型。这是我的理解啊,也许不对。
再次谢谢各位!


----------------解决方案--------------------------------------------------------

大家都是高手啊,我看的头晕晕


----------------解决方案--------------------------------------------------------
以下是引用zyz013920在2007-1-8 21:08:26的发言:

谢谢各位,但是我还是有点不明白。
书上说指针是一种数据类型,和int double 一样。但是假如现在定义了一个double型的指针,申请了一片地址,把地址给了指针,然后接着把这个地址赋给一个double型的指针,这个时候就有错了,为什么?难道是两个数据变量类型不同就不能互相赋值?那么地址到底是什么数据类型,这里小弟查书,书上又说地址也是一个数据类型,我有点不明白。
doulbe * ipMatrix, *Matrix;
int i;
ipMatrix=(double *)malloc(Row * Col*sizeof(double));
Matrix=(double *)malloc(Row * sizeof(double));
for(i=0;i<Row;i++)
*(Matrix+i)=ipMatrix+i*Col; /*这里有错*/
假如我定义一个int型的二维数组,还是如此定义,再编译,就不会有报错。这是为什么?我怎么感觉这里指针是不是有点我没有理解的东西。
int * ipMatrix, *Matrix;
int i;
ipMatrix=(int *)malloc(Row * Col*sizeof(int));
Matrix=(int *)malloc(Row * sizeof(int));
for(i=0;i<Row;i++)
*(Matrix+i)=ipMatrix+i*Col; /*用double型数据时这里有错,但是改成int型的时候这里就没有错了*/
然后再调用Matrix时就是双层指针了。
谢谢各位,
大家多提自己的想法!

*(Matrix+i)=ipMatrix+i*Col; 其中ipMatrix是一个 double型数据的地址,应为整数类型,i*Col的值也是一个整数,所以等式右边的值应为整数类型,而楼主定义了doulbe * ipMatrix, *Matrix,表示这两个指针所指对象为double型,所以有错。


----------------解决方案--------------------------------------------------------
  相关解决方案