我是一个小新手,指针仍然给我带来麻烦。我想改变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;
}
答案 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了解指针算法的基本概念。