【问题标题】:Pointer manipulation inside function函数内部的指针操作
【发布时间】:2015-10-06 21:15:58
【问题描述】:

假设我有一个指向内存的指针

0x10000000

我想往里面添加,让它遍历内存,例如:

0x10000000 + 5 = 0x10000005

我将如何在函数中执行此操作?如何传入指针指向的地址,并在函数内部向其添加 5,然后在函数完成后,我可以使用该值?

【问题讨论】:

  • 你会如何用int 做同样的事情?
  • 您的实际问题是哪一部分?您是否尝试过编写您的函数?
  • 指针的类型是什么?你怎么知道ptr + 5 会产生大于 5 个地址的值?
  • 那你需要给指针传递一个指针。 (例如,void someFunction(int **iPtrVariable)
  • @JoJo *iPtrVariable

标签: c pointers


【解决方案1】:

你有两个选择:

  1. 函数可以返回更新后的指针。

    char *f(char *ptr) {
        ptr += 5;
        return ptr;
    }
    

然后调用者会这样做:

    char *p = some_initialization;
    p = f(p);
  1. 函数参数可以是指向指针的指针,它通过以下方式间接引用:

    void f(char **ptr_ptr) {
        *ptr += 5;
    }
    

然后调用者会这样做:

    char *p = some_initialization;
    f(&p);

【讨论】:

    【解决方案2】:

    基本上,就像其他人所说的那样,您必须通过引用(即指向指针又名双指针的指针)将指针传递给函数。

    #include<stdio.h>
    
    void IncrementAddress(void **addr)
    {
       int offset=5;//give what ever value you want
    
       *addr = *addr + offset;
        printf("%d\n",*addr);
    }  
    
    int main()
    {
      char x;// or any other data type like int x or float x etc.
      void *ptr=NULL;
      ptr = &x;
    
      printf("%d\n",ptr);
      IncrementAddress(&ptr);
      printf("%d\n",ptr);
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2012-01-02
      • 2012-10-17
      • 1970-01-01
      • 2013-11-13
      • 2013-12-29
      相关资源
      最近更新 更多