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?
这里发生的奇迹是因为两件事:
valuePassed
在对 changeValue()
的调用中由 testValue
的地址分配为 valuePassed
:
changeValue(&testValue);
注意,&
产生一个对象的地址。
*
解引用运算符位于:
*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.
我对 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?
这里发生的奇迹是因为两件事:
valuePassed
在对changeValue()
的调用中由testValue
的地址分配为valuePassed
:
changeValue(&testValue);
注意,&
产生一个对象的地址。
*
解引用运算符位于:
*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.