Pointer/pointer 变量赋值和打印输出

Pointer/pointer variable assigning and printing output

我对 C 中的指针还很陌生,我有一个练习题,但我不明白为什么答案是这样。代码如下:

#include <stdio.h>
#include <stdlib.h> 

void changeValue(int *valuePassed)
{
    *valuePassed = 100;
}

int main()
{
    int testValue = 9;
    changeValue(&testValue);
    printf("%d\n", testValue);
}

这最终打印了 100,我不确定为什么。

首先,函数 changeValue 是传递指针变量还是传递地址 valuePassed 处的值(据我所知,这是两个不同的东西)。其次,行 *valuePassed = 100 将 valuePassed 位置的值设置为 100,对吗?但是 valuePassed 还没有分配地址。那么如果把testValue(&testValue)的地址传入changeValue函数,100是怎么打印出来的呢?

is the function changeValue being passed a pointer variable or is it being passed the value at address valuePassed

&testValue是变量的地址 valuePassed

*valuePassed = 100 is setting the value at the location of valuePassed to 100, correct?

"valuePassed = 100;"改变了变量valuePassed的值,但是这里因为" *”形式“*valuePassed = 100;”修改地址存储在valuePassed中的值。因为 valuePassed 赋值为 valuePassed 的地址,赋值将 valuePassed 的值修改为 100

 printf("%d\n", testValue);

打印 100 作为 testValue

的当前值

这就是指针的目标

So if the address of testValue (&testValue) is passed into the changeValue function, how is 100 being printed?

这里发生的奇迹是因为两件事:

  1. valuePassed 在对 changeValue() 的调用中由 testValue 的地址分配为 valuePassed:
changeValue(&testValue);

注意,& 产生一个对象的地址。

  1. * 解引用运算符位于:
    *valuePassed = 100;

此运算符取消引用指针 valuePassed。表示它访问 valuePassed 指向的对象。

以这种方式,100 被分配给 main() 内部的对象 testValue,然后通过调用 printf() 打印 100

First, is the function changeValue being passed a pointer variable or is it being passed the value at address valuePassed (from what I know, these are two different things)

传递了变量的地址testValue

changeValue(&testValue);

赋值给指针变量valuePassed是函数的参数同时也是函数的局部变量..

void changeValue(int *valuePassed)

你可以想象函数调用和函数定义如下

changeValue(&testValue);

//...

void changeValue( /* int *valuePassed */ )
{
    int * valuePassed = &testValue;
    *valuePassed = 100;
}

But valuePassed has not been assigned an address.

你错了。正如您在上面看到的那样,它是由变量 testValue.

的地址分配的

So if the address of testValue (&testValue) is passed into the changeValue function, how is 100 being printed?

整数常量 100 未指向。它指向变量 testValue 并指向它指向的内存,该内存是定义变量的地方,存储整数常量 100。

在 C 术语中,通过指向对象的指针间接传递对象称为按引用传递。

来自 C 标准(6.2.5 类型,第 #20 页)

— A pointer type may be derived from a function type or an object type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type. A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’. The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’. A pointer type is a complete object type.