鱼C论坛

 找回密码
 立即注册
查看: 2980|回复: 4

c语言指针与二维数组问题、纠结中!!!

[复制链接]
发表于 2012-6-16 17:42:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

zp(float *p, int n)
{
     float *p1;
     float sum = 0, aver;
     p1 = p + n - 1;
     for(; p <= p1; p++)
          sum = sum + (*p);
     aver = sum/n;
     printf("%.2f \n", aver);
}

se( float(*p)[4] , int n )
{
     int i;
     for(i=0; i<4; i++)
          printf("%.2f\n", *(*(p+n)+i) );
}

main()
{
     float s[3][4]={{90,89,77,78},{87,67,76,95},{90,93,91,76}};
     zp(*s, 12 );      //这个地方为什么将*去掉的话传的就是指向行了、但得到的结果怎么没变呢?经过函数就应该指向第十一行、但结果却没出错!!
     se(s, 2);       //这里的如果我用se( s[0], 2 )、得到的为什么还是同一个结果、当改成 se( s[0], 2 )的时候,s[0]不是指向列了吗,那么 传到se函数里面的时候   经过*(*(p+n)+i) )  不 就相当于*(*( s[0]+2) + i )吗!s[0]是指向列的!那么s[0]+2就应该指向s[2]啊!再加一个i 也就加 0 、还是s[2]啊!  为什么输出的值不是这样呢???超级困惑!!!                     
}:Q
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-6-16 17:42:40 | 显示全部楼层
注释了太多文字,导致main函数那里不是很清楚了、不太好意思!!!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-16 18:57:30 | 显示全部楼层
首先我知道你在努力区分&a[]和&a[][]的不同,但是在函数传递的时候,它传的只是地址。我估计应该是没有传递基类型。也就是到底指向行还是列。而且我试过在zp函数的第一个循环改为for(;p<=p1+2;p++)结果是一样的,你可以自己在VC试一下。所以  也有可能是指向十一行但是没影响。第二个问题我建议你看看谭浩强的书,认真看看他的解释。(s[0]+2))是指向s[2]行没有错但是在前面加一个*  得到*(s[0]+2)这意义就完全变了   如果你有自学能力的话  自己看书  告诉我他变成什么。我也是自学C刚到这里  全是个人理解  有不对的多多包涵。互相学习.  Ly,.
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-6-16 19:15:01 | 显示全部楼层

谢谢!不过我把问题搞错了呵呵!!
第二个问题是这样的
se(s, 2);       //这里如果我用se( s[0], 2 )、得到的为什么还是同一个结果、当改成 se( s[0], 2 )的时候,s[0]不是指向列了吗,那么 传到se函数里面的时候   经过*(*(p+n)+i) )  不 就相当于*(*( s[0]+2) + i )吗!s[0]是指向列的!那么s[0]+2就应该指向s[2][0]啊!再加一个i 也就加 0 、还是s[2][0]啊!  为什么输出的值不是这样呢???超级困惑!!!                     
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-16 19:47:22 | 显示全部楼层
牧马人 发表于 2012-6-16 19:15
谢谢!不过我把问题搞错了呵呵!!
第二个问题是这样的
se(s, 2);       //这里如果我用se( s[0], 2 )、 ...

建议自己看看书,s[0]+2是指向第二行的。*(s[0]+2)才是指向s[2][0]   基类型都不一样了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-13 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表