鱼C论坛

 找回密码
 立即注册
查看: 4844|回复: 2

关于C语言指针的一个问题!

[复制链接]
发表于 2013-4-14 12:21:17 | 显示全部楼层 |阅读模式
3鱼币
  1. #include <stdio.h>

  2. //返回指针的函数
  3. //类型名 *函数名(参数表列);
  4. //例如: int *a(int x,int y);
  5. void main()
  6. {
  7. double score[][4] = {{60.0, 70.0, 80.5, 90.5}, {56.0, 89.0, 67.0, 88.0}, {34.2, 78.5, 90.5, 66.0}};
  8. double *search(double (*pointer)[4], int n);
  9. double *p;
  10. int i, m;

  11. printf("Please enter the number of student: ");
  12. scanf("%d", &m);

  13. printf("The scores of No.%d are: \n", m);

  14. p = search(score, m);

  15. for( i=0; i < 4; i++)
  16. {
  17. printf("%5.2f\t", *(p + i));
  18. }

  19. printf("\n\n\n");
  20. }

  21. double *search(double (*pointer)[4], int n)
  22. {
  23. double *pt;

  24. pt = *(pointer + n);

  25. return pt;
  26. }
复制代码
为什么是pt = *(pointer + n); 而不是pt=pointer+n;
*不是取值吗?这里应该不是返回一个地址吗?为什么要取值


最佳答案

查看完整内容

double *search(double (*pointer)[4], int n) { double *pt; pt = *(pointer + n); pointer是一个二维数组的首地址,它指向每一个一维数组[4]类型的首地址,*pointer得到的就是每个移位数组的首地址。 也就是说 pointer 是一个指针的集合,它里面存放的都是地址,你取它的内容,也就自然取出的是地址了呀。 不知道这样说你明白吗。 实在不明白就下断点调试一下。看一看pointer在栈中的值。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-14 12:21:18 | 显示全部楼层
double *search(double (*pointer)[4], int n)
{
double *pt;

pt = *(pointer + n);

pointer是一个二维数组的首地址,它指向每一个一维数组[4]类型的首地址,*pointer得到的就是每个移位数组的首地址。
也就是说 pointer 是一个指针的集合,它里面存放的都是地址,你取它的内容,也就自然取出的是地址了呀。
不知道这样说你明白吗。
实在不明白就下断点调试一下。看一看pointer在栈中的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-14 13:05:33 | 显示全部楼层
没人啊!!!!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-3 15:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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