使用c交换使用指针的两个整数

时间:2017-04-14 13:51:59

标签: c pointers reference

我正在尝试使用指针交换两个整数的值,请参阅下面的代码:使用c中的指针交换数字:

{
    int a = 10;
    int b = 20;

    swapr(&a, &b);
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}

void swapr(int *x, int *y)  //function
{
    int t;
    t=*x;
    *x=*y;
    *y=t;
}

在代码中,当swap(&A, &B);*x指向的值不是地址时,为什么会使用*y

3 个答案:

答案 0 :(得分:6)

当您说(int *x, int *y)时,您只是声明xy为指针。在以后的所有用法中,当您说x时,它表示指针,当您说*x时,它表示它指向的值。

答案 1 :(得分:3)

在声明中,声明符中的*表示该对象具有指针类型。接受声明

int *p;

p的类型是“指向int的指针”。此类型由类型说明符int声明符 *p的组合指定。

Pointer-ness,array-ness和function-ness都被指定为声明符的一部分:

T *p;       // p is a pointer to T
T a[N];     // a is an N-element array of T
T f();      // f is a function returning T
T *ap[N];   // ap is an array of pointers to T
T (*pa)[N]; // pa is a pointer to an array of T
T *fp();    // fp is a function returning pointer to T
T (*pf)();  // pf is a pointer to a function returning T

等。

在C中,声明模仿使用 - 如果你有一个指向名为int的{​​{1}}并且你想要访问它指向的值的指针,你可以用p运算符取消引用它,像这样:

*

表达式 x = *p; 的类型为*p,因此int声明

p

int *p; 中,表达式main&a的类型为&b,因此相应的参数必须声明为int *

int *

答案 2 :(得分:1)

基本上,var声明的工作方式是声明变量

int c;

您刚刚声明了一个整数,您可以为其指定值或检索其值,如下所示

int a;
int b;
a = 10;  // assign 10
b = a;   //assign value of a to b

指针虽然有点不同。如果您声明了一个指针,并且想要为其指定一个值,则必须使用*运算符取消引用它

int * a;  // declare a pointer
int b;    // declare a var
b = 10;   // assign 10 to b
*a = b;   // assign 10 as the value of a
b = 20;   // b is now 20 but the var a remains 10

但你也可以指定指向内存地址的指针

int * a;
int b;
b = 10;   // assign 10 to b
a = &b;   // assign address of b to a (a points at b)
b = 20;   // value of b changes (thus value of a is also 20 since it is pointing at b

所以,如果你有一个功能签名

int func (int * a, int * b);

这一切都意味着该函数采用两个变量的地址

int a;
int b;
int * x;
int * y;

func(&a, &b); // send it the address of a and b
func(x, y);   // send it the address of x and y
func(x, &b);  

基本上可以使用& amp ;;访问正常的var地址。操作