如何保持指针增量

时间:2015-09-15 15:19:10

标签: c function pointers

我有以下代码

   void fun(int * d)
   {
    d+=1;
   }

   int main()
   {
      int * f=malloc(5);
      f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;
      fun(f);
      printf("value : %d\n",*f);
      return 0;
   }

所以,我将一个整数指针传递给函数并在那里递增。我希望该增量在返回main时保持不变。 当我打印该值时,输出为“0”。但我希望输出为'1',因为我已经增加了函数中的值。

所以,简而言之,我的问题是,如何坚持对指针所做的更改?

3 个答案:

答案 0 :(得分:4)

假设你想增加指针这个值,你有两个选择:

  1. 将函数重新转换为void fun(int ** d),在函数体中使用(*d)+=1;,然后使用fun(&f);

  2. 进行调用
  3. 将函数重新转换为int* fun(int* d)返回新值。

  4. 如果您想增加,请在函数体中使用(*d)+=1;

    您不需要*d周围的括号:为了清楚起见,我已将它们放入。

答案 1 :(得分:1)

你忘了*在d + = 1;

当您传递该指针时,您可以使用该方法访问f [0]: 看看这里:

#include <stdio.h>
#include<stdlib.h>

void fun(int *d){
    *d+=1;
}

int main(void){
    int i;
    int *f=malloc(5 * sizeof int);

    f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;

    for(i=0;i<5;i++){
        printf("%d ",f[i]);
    }

    printf("\n");

    fun(f);

    for(i=0;i<5;i++){
        printf("%d ",f[i]);
    }
    free(f);
    return 0;
}

输出:

0 1 2 3 4 
1 1 2 3 4

或者,如果您尝试为所有元素添加+1,则可以执行以下操作:

#include <stdio.h>
#include<stdlib.h>

int *fun(int *d, int len){
    int i;
    int *newArray = d;
    int newValue = 1;

    printf("\n");
    for(i = 0; i < len; i++) {
        newArray[i] += newValue;
    }

    return newArray;
}

int main(void){
    int i;
    int f[] = {0,1,2,3,4};
    int *newArray;

    f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;

    for(i=0;i<5;i++){
        printf("%d ",f[i]);
    }

    printf("\n");



    newArray = fun(f,5);

    for(i=0;i<5;i++){
        printf("%d ",newArray[i]);
    }
    return 0;
}

输出:

0 1 2 3 4 
1 2 3 4 5

顺便说一句,你忘了释放 f

答案 2 :(得分:0)

你必须传递指针的地址,所以:

void fun(int **val) {
    *val++;
    ....
}
int main() {
    ...
    fun(&f);
    ...
}