*C指针中的符号
这里,我提供了一个使用指针的简单代码*C指针中的符号,c,pointers,syntax,C,Pointers,Syntax,这里,我提供了一个使用指针的简单代码 void rets(int *px, int *py) { *px = 3; *py = 5; } int main() { int x, y; rets(&x, &y); printf("First is %d, second is %d", x, y); } 我只是想把它弄清楚。。。在声明中:int*px,*py,留出两个字节用于存储整数变量的地址,并为该存储空间指定名称px。它还留出另外两个字
void rets(int *px, int *py)
{
*px = 3;
*py = 5;
}
int main()
{
int x, y;
rets(&x, &y);
printf("First is %d, second is %d", x, y);
}
我只是想把它弄清楚。。。在声明中:int*px,*py
,留出两个字节用于存储整数变量的地址,并为该存储空间指定名称px。它还留出另外两个字节来存储另一个整数变量的地址,并为该空间命名为py。星号告诉编译器这些变量将包含地址,而不是值(如果我没弄错的话?),int告诉编译器地址将指向整数变量。但是——这就是许多困惑的根源:
*px = 3;
*py = 5;
它在这里的使用方式与指针声明略有不同。这是什么意思?所以在函数声明中,您声明了指向int的指针,这些指针将作为参数传递。在定义中,您正在取消引用指针,因此实际上使用main中声明的变量空间。如果您没有取消引用,那么您只是在更改指针,而不是指向的对象。在调用rets()的地方,使用&,给出main中定义的变量的地址
*px = 3;
*py = 5;
这意味着您将值
3
赋给指针所指向的内存px
,并将值5
赋给指针所指向的内存py
基本上,“*”在C中有3种不同的用法(除非我遗漏了什么),具体取决于上下文
TYPE * x;
这声明了一个变量x,该变量包含指向类型为的值的指针
而当你有
*x
当x是指针时,它指的是x所指向的对象,称为解引用(因为指针也被称为引用)将
void
放入main()
,其优点是什么?无,应为int以及argc和argv的两个参数。这只是为了澄清问题而进行的一次快速编辑。您的意思是:函数已间接地将值3和5传递给变量x和y?@aerohn您已将地址赋予函数x和y,这允许函数通过访问地址(取消引用)来更改x和y的值。在C语言中,函数获取参数的副本。如果你想要一个函数来改变变量,你就给它一个指向该变量的指针。为什么投票要结束?这是一个完全合理的问题。