| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 367 人关注过本帖
标题:关于指针地址的问题
只看楼主 加入收藏
御剑小子
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-2-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
关于指针地址的问题
大家好,编了2个简单的指针的代码,一个正确,但是仅仅改变了他的行地址后就错了,我觉得应该是没错的,不知道什么原因,请给位解释下,谢谢!
第一个(正确):
程序代码:

 #include<stdio.h>

 void main()
    {    float *search(float (*point)[5],int n);
    int i,n=3;
    float    a[][5]={{2,4,6,7,9},{2,56,66,75,93},{26,47,66,87,59},{62,74,96,7,79}};
    float *p;
    p=search(a,n);
    for(i=0;i<5;i++)
    printf("%5.2f\n",*(p+i));
    }
       float *search(float (*point)[5],int n)
  {    float *m;
       m=*(point+n);
       return(m);
   }

第二个(错误):
程序代码:

 #include<stdio.h>

 void main()
    {    float *search(float (*point)[5],int n);
    int i,n=3;
    float    a[][5]={{2,4,6,7,9},{2,56,66,75,93},{26,47,66,87,59},{62,74,96,7,79}};
    float *p;
    p=search(a,n);
    for(i=0;i<5;i++)
    printf("%5.2f\n",*(*p+i));
    }
       float *search(float (*point)[5],int n)
  {    float *m;
       m=(point+n);
       return(m);
   }
2014-02-27 11:38
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
收藏
得分:7 
你用的++ 编译器么?
2014-02-27 17:49
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
收藏
得分:0 
程序代码:


 m=(point+n); 这一句和 m = *(point+n);地址是一样的,但是意义不一样。


 也就是两个DEMO的区别在于这句:
    printf("%5.2f\n",*(*p+i));

 你的返回是一个float *,这样它的指针类型从 指向某一行的地址 转变为 指向某一行的first元素的地址。*p就是这个元素值,但是你外面又取*运算。你是要逆天么。强检查的编译器都会报错。

 

2014-02-27 17:59
MusicSky
Rank: 2
等 级:论坛游民
帖 子:10
专家分:19
注 册:2013-7-16
收藏
得分:7 
楼上说的太复杂了
其实就是
m=(point+n);//改为
m=*(point+n);
2014-02-28 01:00
快速回复:关于指针地址的问题
数据加载中...
 
   



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

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