首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C关于函数中指针的问题

C关于函数中指针的问题
EN

Stack Overflow用户
提问于 2011-08-04 20:27:37
回答 2查看 137关注 0票数 0

关于这个代码,我有两个问题。

  1. double*** pdataint*** pmask是什么意思?指向指针的指针?为什么或者何时这个necessary?
  2. intdouble是不同的类型,但是double*int*也是不同的。我们能在没有石膏的情况下对它们进行手术吗?

下面是我困惑的代码:

代码语言:javascript
复制
static int makedatamask(int nrows, int ncols, double*** pdata, int*** pmask)
    { int i;
      double** data;
      int** mask;
      data = malloc(nrows*sizeof(double*));
      if(!data) return 0;
      mask = malloc(nrows*sizeof(int*));
      if(!mask)
      { free(data);
        return 0;
      }
      for (i = 0; i < nrows; i++)
      { data[i] = malloc(ncols*sizeof(double));
        if(!data[i]) break;
        mask[i] = malloc(ncols*sizeof(int));
        if(!mask[i])
        { free(data[i]);
          break;
        }
      }
      if (i==nrows) /* break not encountered */
      { *pdata = data;
        *pmask = mask;
        return 1;
      }
      *pdata = NULL;
      *pmask = NULL;
      nrows = i;
      for (i = 0; i < nrows; i++)
      { free(data[i]);
        free(mask[i]);
      }
      free(data);
      free(mask);
      return 0;
    }
EN

回答 2

Stack Overflow用户

发布于 2011-08-04 20:30:23

A) A*可以是指向指针数组的指针,也可以是指向指针的二维数组

( B) int和double是不同的类型,没有强制转换就不能运行。

票数 1
EN

Stack Overflow用户

发布于 2011-08-04 20:31:36

双* pdata和int*p掩码是什么意思?指向指针的指针?

是。

什么时候有这个必要?

当像这个函数一样,您想通过指针返回指针到指针的值时.当然,您也可以通过值返回这些值,但是这个函数是通过指针来实现的,因为它“返回”多个指针。

int和double是不同的类型,但double*和int*也不同。我们能在没有石膏的情况下对他们动手术吗?

我不知道您的意思,但您不能期望将int*转换为double*,反之亦然;对于相同的值,intdouble很可能在内存中有不同的表示形式(尽可能表示相同的值)和不同的大小。你还违反了C的“严格混叠”规则

代码语言:javascript
复制
double *p = WHATEVER;
int *q = p;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6948112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档