| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1216 人关注过本帖
标题:用int (*s)[10]处理函数中的元素
只看楼主 加入收藏
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:22 
用int (*s)[10]处理函数中的元素
程序代码:
#include <stdio.h>
main()
{   int fun(int (*s)[10],int *b,int *n,int mm,int nn);
    int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}};
    int a[100],i,j,n=0;
    printf("array a:\n");
    for(i=0;i<3;i++)
    {for(j=0;j<4;j++)
            printf("%d ",w[i][j]);
        printf("\n");
    }
    fun(w,a,&n,3,4);
    printf("array b:\n");
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}
int fun(int (*s)[10],int *b,int *n,int mm,int nn)
{
    

}
将一个3行4列的二维数组存放在一个一维数组中依次输出。如上
33 33 33 33
44 44 44 44
55 55 55 55
变成:33 33 33 33 44 44 44 44 55 55 55 55输出。
而且要把在一维数组中所存数的个数存放在变量n的单元中。        
这个 int (*s)[10] 能不能具体给解释一下。实参w数组的数组名传给形参(*s)[10],如果在fun中i=0,那么形参(*s)[10]加1,是不是指向w中第零行第一列元素?
如何用那个形参把w数组中的元素表示出来?求解。这个算法我会,就是表示元素,把我搞晕了。

搜索更多相关主题的帖子: 元素 color 
2013-03-31 14:17
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
题目要求如此???

DO IT YOURSELF !
2013-03-31 14:58
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 2楼 wp231957
是啊  不怕你笑话,今天考二级,就这道题。前面选择题还做的可以,结果改错、填空连续遇到的都是链表,链表我都没接触过,这个程序,算法我会,就是int (*s)[10]我理解不透彻,造成了这一败笔。
2013-03-31 17:05
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
s跟w一样用 表示元素 s[i][j]就行了
这个属于指针中 指向数组的指针 一块的知识 看书就知道了

人生是一场错过 愿你别蹉跎
2013-03-31 19:19
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 4楼 fanpengpeng
我看老谭的书,还有其他书对着这块讲的很少,仅仅只是提了一下。求助啊
2013-03-31 19:22
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:0 
int(*s)[10],s是行指针,他是指向由10个元素组成的一维数组的指针变量。
fun()
{
  int i,j;
  for(j = 0;j < nn;j++)
    for(i = 0;i < mm;i++)
     b[(*n)++] = s[i][j];
     return  0;
}汗

[ 本帖最后由 小习小习 于 2013-4-1 18:44 编辑 ]

实现自己既定的目标,必须能耐得住寂寞单干。
2013-03-31 19:27
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
首先 关于两个运算符 * 和 [] 的关系
a[i] 等价于 *(a+i) 你把a[i] 写成 i[a] 也是对的 因为 a+i 与 i+a 是一致的
接着 关于多维数组的理解
多维数组也是数组 只是多维数组的元素是数组类型 而一维数组的元素是普通类型
int a[2][3] a是一个有两个元素的数组 他的每一个元素是int [3] 即三个元素的int数组
其次 int *s[3] 与 int (*s)[3] 的区别
int *s[10] s是一个数组 元素 int* int (*s)[10] s是一个指针 元素是 int [3] 数组类型
最后 数组名表示什么
数组名可以表示数组本身 或 他的第一个元素的地址 数组名在函数参数中表示后面一个意思

理解 int w[10][10] int (*s)[10] s = w; 之后 s如何使用
s是指向int[10]的指针 也就是w的元素的类型 如果一维数组与指针你完全没有问题的话 这里就直接来
s取得w的第一个元素的地址后 *s就是w的第一个元素w[0] *(s+i)就是元素w[i]
w的元素是数组 所以对数组类型做下标运算 (*s)[0] 表示w[0][0] (*(s+i))[j] 表示w[i][j]
联系最上面 * 与 []的联系
*(s+i) s[i] 则 s[i][j] 与 w[i][j] 等价

你看这样能不能理解 当然这只是形象化的理解 不是本质的认识 要想知道的更多 多读书就可以了

人生是一场错过 愿你别蹉跎
2013-03-31 20:05
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 6楼 小习小习
好像不行,我调试一下不行。你看代码
程序代码:
#include <stdio.h>
main()
{   int fun(int (*s)[10],int *b,int *n,int mm,int nn);
    int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}};
    int a[100],i,j,n=0;
    printf("array a:\n");
    for(i=0;i<3;i++)
    {for(j=0;j<4;j++)
            printf("%d ",w[i][j]);
        printf("\n");
    }
    fun(w,a,&n,3,4);
    printf("array b:\n");
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}
int fun(int (*s)[10],int *b,int *n,int mm,int nn)
{

 
    int i,j;
    for(j=0;j<mm;j++)
        for(i=0;i<nn;i++)
            b[(*n)++]=s[i][j];
}
错误信息:
图片附件: 游客没有浏览图片的权限,请 登录注册

求助啊
2013-03-31 23:04
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 4楼 fanpengpeng
你看我写的函数是这样如何:
程序代码:
int fun(int (*s)[10],int *b,int *n,int mm,int nn)
{
    int i,j;
    for(i=0;i<mm;i++)
        for(j=0;j<nn;j++,b++,)
        {
            *b=s[i][j];
                *n++;
       
        }
}

2013-03-31 23:09
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
收藏
得分:0 
回复 7楼 fanpengpeng
非常感谢。我好像懂了。
程序代码:
{
    int i,j;
    for(i=0;i<mm;i++)
        for(j=0;j<nn;j++,*n++)
            *b++=s[i][j];
        ++(*n);
}
你看这样对不?
2013-03-31 23:29
快速回复:用int (*s)[10]处理函数中的元素
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031701 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved