C语言中变量和数据对象的区别?
Difference between variable and data object in C language?
我在阅读 C Primer Plus 时遇到了以下我无法理解的行-
Pointers? What are they? Basically, a pointer is a variable (or, more
generally, a data object)whose value is a memory address.
仅供参考,我之前遇到过这些行-
Consider an assignment statement. Its purpose is to store a value at a
memory location. Data object is a general term for a region of data
storage that can be used to hold values. The C standard uses just the
term object for this concept. One way to identify an object is by
using the name of a variable.
我尝试用谷歌搜索,但找不到 anything.These 基本术语让我感到困惑,所以请帮助我理解这些术语。
数据对象是存储程序使用的信息的内存位置。
变量是程序中用来引用数据对象的名称。
所以如果你写:
int a;
它告诉编译器创建一个可以容纳整数的数据对象,在程序中您可以使用名称 a
来访问该数据对象。
指针是一个数据对象,其值是其他某个数据对象在内存中的位置。所以如果你这样做:
int *pa = &a;
您正在创建一个引用数据对象的变量 pa
,该数据对象的内容是作为 a
变量声明的结果创建的数据对象的地址。
你已经有了答案,但如果你还想的话:
Variables :变量可以被认为是为 holder 分配的名称,它引用你的实际对象,所以当我们说 int x 它就像一个占位符,什么都不引用(垃圾值在 c) 但是当我们说 int x=10;它用值 10 初始化 x(现在它也引用 int 类型的数据对象,在这种情况下,数据对象的名称将由编译器本身维护),我们可以使用名称 x 来访问值 10.
Data object :正如您引用的 "Data object is a general term for a region of data storage that can be used to hold values." 即。内存位置
Pointers :基本上,指针就像存储值的变量,而不是存储实际值(如 int、float、char..),它们将地址保存到您所在的内存位置存储实际值,即对数据对象的引用。
"so when you say int x you say declare a placeholder named x of type int and when you say int *x you say declare a placeholder named x of pointer type that can hold reference to an int type."
在 C 中,对象 是任何占用存储空间的东西。 C 2011 online draft:
3. Terms, definitions, and symbols
...
3.15
1 object
region of data storage in the execution environment, the contents of which can represent values
lvalue 是一个表达式,它指定一个对象,以便可以读取或修改该对象的内容(基本上,任何可以作为赋值目标的表达式都是一个左值)。虽然 C 标准没有定义术语变量,但您基本上可以将其视为指定对象的任何标识符:
int var;
标识符var
指定一个存储整数值的对象; 表达式 var
是一个左值,因为你可以读取 and/or 通过它修改对象:
var = 10;
printf( "%d\n", var );
A pointer 是任何表达式,其值为对象的位置。指针变量是一个存储指针值的对象。
int *p = &var;
标识符p
指定一个存储整数对象位置的对象。 表达式 &var
的计算结果为对象 var
的位置(地址)。它不是左值;它不能是赋值的目标(你不能更新对象的地址)。一元运算符 &
的操作数必须是左值。表达式 p
, OTOH, 是 一个左值,因为您可以为其分配一个新值:
int y = 1;
p = &y;
printf( "%p\n", (void *) p ); // one of the few places in C you need to cast a void pointer
表达式*p
指定p
指向的对象(在本例中为y
)。它也是一个左值,因为您可以通过它分配给对象:
*p = 5; // same as y = 5
printf( "%d\n", *p );
所以基本上:
var
、p
、y
是变量(标示对象的标识符)
var
、p
、*p
和 y
是左值(可以读取或修改对象的表达式)
&var
,p
,&p
&y
是指针表达式(值为对象位置的表达式)
p
是一个指针变量(存储指针值的对象)
数据对象就是存储数据的对象,我们电脑中的数据对象就是内存中的寄存器。每个寄存器都有一个地址位置。 Register有read_lock和write_lock机制。在这些寄存器中,您可以存储可变数据和常量数据。可变数据意味着它可以在整个过程中修改。意思是,保存可变数据的数据对象称为变量。变量 read_lock 和 write_lock 被禁用。这就是为什么您可以在整个过程中修改变量(可变数据对象)的原因。要识别可变数据对象,您需要为其声明一个名称。
例如:内部速度:= 60;
这里的速度是一个变量(可变数据对象),它的大小是 4 个字节。它只保存整数数据。变量中的数据在整个应用过程中是可以改变的。
在数据对象中,如果您存储常量数据,则这些数据对象称为常量。对于常量数据对象,禁用 rd_lock 但启用 write_lock。这就是为什么您可以读取常量但不能为其赋值的原因。
要识别常量,您需要为其声明一个名称。
例如:int const 速度 = 100;
这里速度是一个常量(常量数据对象)。 speed 中的数据不能在其整个应用程序中更改 process.this speed 仅保存感兴趣类型的数据。
我在阅读 C Primer Plus 时遇到了以下我无法理解的行-
Pointers? What are they? Basically, a pointer is a variable (or, more generally, a data object)whose value is a memory address.
仅供参考,我之前遇到过这些行-
Consider an assignment statement. Its purpose is to store a value at a memory location. Data object is a general term for a region of data storage that can be used to hold values. The C standard uses just the term object for this concept. One way to identify an object is by using the name of a variable.
我尝试用谷歌搜索,但找不到 anything.These 基本术语让我感到困惑,所以请帮助我理解这些术语。
数据对象是存储程序使用的信息的内存位置。
变量是程序中用来引用数据对象的名称。
所以如果你写:
int a;
它告诉编译器创建一个可以容纳整数的数据对象,在程序中您可以使用名称 a
来访问该数据对象。
指针是一个数据对象,其值是其他某个数据对象在内存中的位置。所以如果你这样做:
int *pa = &a;
您正在创建一个引用数据对象的变量 pa
,该数据对象的内容是作为 a
变量声明的结果创建的数据对象的地址。
你已经有了答案,但如果你还想的话:
Variables :变量可以被认为是为 holder 分配的名称,它引用你的实际对象,所以当我们说 int x 它就像一个占位符,什么都不引用(垃圾值在 c) 但是当我们说 int x=10;它用值 10 初始化 x(现在它也引用 int 类型的数据对象,在这种情况下,数据对象的名称将由编译器本身维护),我们可以使用名称 x 来访问值 10.
Data object :正如您引用的 "Data object is a general term for a region of data storage that can be used to hold values." 即。内存位置
Pointers :基本上,指针就像存储值的变量,而不是存储实际值(如 int、float、char..),它们将地址保存到您所在的内存位置存储实际值,即对数据对象的引用。
"so when you say int x you say declare a placeholder named x of type int and when you say int *x you say declare a placeholder named x of pointer type that can hold reference to an int type."
在 C 中,对象 是任何占用存储空间的东西。 C 2011 online draft:
3. Terms, definitions, and symbols
...
3.15
1 object
region of data storage in the execution environment, the contents of which can represent values
lvalue 是一个表达式,它指定一个对象,以便可以读取或修改该对象的内容(基本上,任何可以作为赋值目标的表达式都是一个左值)。虽然 C 标准没有定义术语变量,但您基本上可以将其视为指定对象的任何标识符:
int var;
标识符var
指定一个存储整数值的对象; 表达式 var
是一个左值,因为你可以读取 and/or 通过它修改对象:
var = 10;
printf( "%d\n", var );
A pointer 是任何表达式,其值为对象的位置。指针变量是一个存储指针值的对象。
int *p = &var;
标识符p
指定一个存储整数对象位置的对象。 表达式 &var
的计算结果为对象 var
的位置(地址)。它不是左值;它不能是赋值的目标(你不能更新对象的地址)。一元运算符 &
的操作数必须是左值。表达式 p
, OTOH, 是 一个左值,因为您可以为其分配一个新值:
int y = 1;
p = &y;
printf( "%p\n", (void *) p ); // one of the few places in C you need to cast a void pointer
表达式*p
指定p
指向的对象(在本例中为y
)。它也是一个左值,因为您可以通过它分配给对象:
*p = 5; // same as y = 5
printf( "%d\n", *p );
所以基本上:
var
、p
、y
是变量(标示对象的标识符)var
、p
、*p
和y
是左值(可以读取或修改对象的表达式)&var
,p
,&p
&y
是指针表达式(值为对象位置的表达式)p
是一个指针变量(存储指针值的对象)
数据对象就是存储数据的对象,我们电脑中的数据对象就是内存中的寄存器。每个寄存器都有一个地址位置。 Register有read_lock和write_lock机制。在这些寄存器中,您可以存储可变数据和常量数据。可变数据意味着它可以在整个过程中修改。意思是,保存可变数据的数据对象称为变量。变量 read_lock 和 write_lock 被禁用。这就是为什么您可以在整个过程中修改变量(可变数据对象)的原因。要识别可变数据对象,您需要为其声明一个名称。 例如:内部速度:= 60; 这里的速度是一个变量(可变数据对象),它的大小是 4 个字节。它只保存整数数据。变量中的数据在整个应用过程中是可以改变的。
在数据对象中,如果您存储常量数据,则这些数据对象称为常量。对于常量数据对象,禁用 rd_lock 但启用 write_lock。这就是为什么您可以读取常量但不能为其赋值的原因。 要识别常量,您需要为其声明一个名称。 例如:int const 速度 = 100; 这里速度是一个常量(常量数据对象)。 speed 中的数据不能在其整个应用程序中更改 process.this speed 仅保存感兴趣类型的数据。