更改指针指向的int变量

时间:2018-03-10 22:29:25

标签: c function pointers parameters

我是一个小新手,指针仍然给我带来麻烦。我想改变int的值,这是我从函数中的参数(作为指针)得到的。

#include <stdio.h>

bool function(int* a){

    a++;

    printf("%d",*a); //getting some big number, maybe address. If i did not use a++; I get just normal a, unchanged.

    return false;
}

4 个答案:

答案 0 :(得分:5)

问题是你在语句a++中递增指针(而不是指向它的值)。如果你不想增加参数的值,你应该首先取消引用它:

(*a)++; //instead of a++;

Printf不是完全打印地址,只是将参数a旁边存储的整数值(可以是整数,可以是其他东西)打印出来。

答案 1 :(得分:4)

您需要取消引用指针以使用*a获取整数(不是地址)的实际值。然后你可以增加该值。因此,您的代码应该是(*a)++而不是a++(在您的情况下,您只是递增地址并尝试访问内存中的下一个位置)。

答案 2 :(得分:3)

指针是一个变量,它包含另一个变量的内存中的地址。我们可以有一个指向任何变量类型的指针。

间接或取消引用运算符*给出指针指向的对象的内容。

一元或一元运算符&给出变量的地址。

在你的程序中,你增加指针a

 a++;

该操作 NOT 会影响指针所指向的对象。

如果要增加参数的值,则应使用解除引用运算符*取消引用指针,然后增加该值。

(*a)++;

这是一个小例子,实际上你可以通过指向它来改变变量的值。

#include <stdio.h>

void function(int* a){

    (*a)++;          // dereference the pointer `a` and increase the content of an object pointed to by the pointer by 1.
    (*a) = (*a) + 2; // dereference the pointer `a` and increase the content of an object pointed to by the pointer by 2.

    printf("\nprint from function (*a) = %d\n",(*a) ); 
}

int main(void)
{
    int x = 7;
    int *p = &x;             // pointer to variable x 

    printf("x = %d\n", x );  //     x = 7

    function(p); // calling with pointer p as argument

    printf("x = %d\n", x );  //    x = 10

    function(&x); // calling with pointer &x as argument  

    printf("x = %d\n", x );  //    x = 13       

    return 0;
}

输出:

x = 7                                                                                                               

print from function (*a) = 10                                                                                       
x = 10                                                                                                              

print from function (*a) = 13                                                                                       
x = 13                                                                                                              

答案 3 :(得分:2)

改为(*a)++。 您的函数接收指针作为参数。如果++与指针变量一起使用,那么对于64位int变量,它将增加到4个字节并保存该内存地址,如果该位置没有值,那么将打印出一个垃圾值为什么你得到这么大的数字。按照this link了解指针算法的基本概念。