如何指向指针

时间:2017-12-14 01:39:43

标签: c pointers

我正在编写一个可以修改函数函数的行和列的程序。我不明白如何做指针的指针。

void changeNum(int*setRows, int *setCol)
{
  changeNum2(*setRows,*setCol);
}
void changeNum2(int*setRows, int *setCol)
{
  *setRows=5;
  *setCol=5;
}
int main() {
  int*row=10;
  int* col=10;
  changeNum(&row,&col);
  printf("%d %d",row,col);
  return 0;
}

2 个答案:

答案 0 :(得分:1)

首先

  int*row=10;
  int* col=10;

这是错误的。分配硬编码地址。你不想要这个

  int row=10;
  int col=10;

如何获取行和col的地址?

&row&col

如何将其传递给函数?

将其称为changeNum(&row,&col);

void changeNum(int*setRows, int *setCol)
{
     ...       
}

如何将指针传递给指针?

void changeNum(int*setRows, int *setCol)
{
    chnageNum2(&setRows, &setCol);
}

ChangeNum2它会如何改变价值?

void chnageNum2(int **setRows, int **setCol){
    **setRows = 110;
    **setCol = 110;
}

我们可以仅使用changeNum()进行相同的更改吗?

是的,我们可以做到。

void changeNum(int*setRows, int *setCol)
{
     *setRows = 110;
     *setCol = 110;        
}

绝对检查this。拿一本书。它会有很大的帮助。

完整的代码将是

void changeNum(int*setRows, int *setCol)
{
  changeNum2(&setRows,&setCol);
}
void changeNum2(int**setRows, int **setCol)
{
  **setRows=5;
  **setCol=5;
}
int main(void) {
  int row=10;
  int col=10;
  changeNum(&row,&col);
  printf("%d %d",row,col);
  return 0;
}

答案 1 :(得分:0)

#include <stdio.h>

void changeNum(int*, int*);
void changeNum2(int*, int*);

void changeNum(int* setRows, int *setCol) {
    changeNum2(setRows,setCol);
}

void changeNum2(int* setRows, int *setCol) {
    *setRows=5;
    *setCol=5;
}

int main() {
    int row=10;
    int col=10;
    changeNum(&row, &col);
    printf("%d %d\n", row, col);
    return 0;
}

需要一些时间才能掌握每个C函数参数都是按值传递的。因此,您可以通过其值将setRows指针安全地传递给第二个函数。

此外,有必要先声明函数changeNum2,我已经包含了没有参数名称的声明,以澄清它的可能性。

我强烈建议您阅读本书:https://en.wikipedia.org/wiki/The_C_Programming_Language,特别是第5章(指针和数组)。

您可以轻松找到PDF副本。我终于学到了这个概念。