Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中变量和数据对象的区别?_C_Variables_Pointers_Object_Terminology - Fatal编程技术网

C语言中变量和数据对象的区别?

C语言中变量和数据对象的区别?,c,variables,pointers,object,terminology,C,Variables,Pointers,Object,Terminology,我在读C Primer Plus时遇到了以下几行我不理解的内容- 指针?它们是什么?基本上,指针是一个变量(或更多) 通常,一种数据对象,其值是内存地址 仅供参考,我在前面遇到了这些问题- 考虑一个赋值语句。它的目的是将一个值存储在 内存位置。数据对象是数据区域的通用术语 可用于保存值的存储器。C标准只使用 此概念的术语对象。识别对象的一种方法是 使用变量的名称 我试过谷歌搜索,但找不到任何东西。这些基本术语让我困惑,所以请帮助我理解这些术语 数据对象是存储程序使用的信息的内存位置 变量是程序中

我在读C Primer Plus时遇到了以下几行我不理解的内容-

指针?它们是什么?基本上,指针是一个变量(或更多) 通常,一种数据对象,其值是内存地址

仅供参考,我在前面遇到了这些问题-

考虑一个赋值语句。它的目的是将一个值存储在 内存位置。数据对象是数据区域的通用术语 可用于保存值的存储器。C标准只使用 此概念的术语对象。识别对象的一种方法是 使用变量的名称


我试过谷歌搜索,但找不到任何东西。这些基本术语让我困惑,所以请帮助我理解这些术语

数据对象是存储程序使用的信息的内存位置

变量是程序中用于引用数据对象的名称

所以如果你写:

int a;
它告诉编译器创建一个可以保存整数的数据对象,并且在程序中可以使用名称
a
访问该数据对象


指针是一个数据对象,其值是其他数据对象在内存中的位置。因此,如果你这样做:

int *pa = &a;

您正在创建一个变量
pa
,该变量引用一个数据对象,其内容是由于
a
变量声明而创建的数据对象的地址。

您已经有了答案,但如果需要:

变量:变量可以被认为是为引用实际对象的持有者指定的名称,所以当我们说int x时,它就像一个占位符,什么都不引用(c中的垃圾值),但当我们说int x=10时;它用值10初始化x(现在它引用int类型的数据对象,在本例中,数据对象的名称将由编译器自己维护),我们可以使用名称x访问值10

数据对象:正如您所引用的“数据对象是数据存储区域的通用术语,可用于保存值。”即内存位置

指针:指针基本上类似于存储值的变量,而不是存储实际值(如int、float、char…),它们将地址保存到存储实际值的内存位置,即对数据对象的引用

因此,当你说int x时,你说声明一个名为x的int类型占位符;当你说int*x时,你说声明一个名为x的指针类型占位符,它可以保存对int类型的引用。

在C中,对象是任何占用存储空间的东西

3。术语、定义和符号

3.15
1对象
执行环境中的数据存储区域,其内容可以表示值 左值是一个表达式,用于指定一个对象,以便可以读取或修改该对象的内容(基本上,任何可以作为赋值目标的表达式都是左值)。虽然C标准没有定义术语变量,但您基本上可以将其视为指定对象的任何标识符:

int var;
标识符
var
指定存储整数值的对象;表达式
var
是左值,因为您可以通过它读取和/或修改对象:

var = 10;
printf( "%d\n", var );
*p = 5;  // same as y = 5
printf( "%d\n", *p );
指针是其值为对象位置的任何表达式。指针变量是存储指针值的对象

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
)。它也是一个左值,因为您可以通过它指定给对象:

var = 10;
printf( "%d\n", var );
*p = 5;  // same as y = 5
printf( "%d\n", *p );
所以基本上:

  • var
    p
    y
    是变量(指定对象的标识符)
  • var
    p
    *p
    y
    是左值(可以读取或修改对象的表达式)
  • &var
    p
    &p
    是指针表达式(其值为对象位置的表达式)
  • p
    是指针变量(存储指针值的对象)

数据对象是存储数据的对象,我们计算机中的数据对象是Ram中的寄存器。每个寄存器都有一个地址位置。寄存器具有读锁定和写锁定机制。在这些寄存器中,可以存储变量数据和常量数据。可变数据意味着它可以在整个过程中进行修改。也就是说,保存变量数据的数据对象称为变量。变量读取锁定和写入锁定被禁用。这就是为什么您可以在整个过程中修改变量(变量数据对象)。要标识变量数据对象,需要为其声明一个名称。 Ex:int速度:=60; 这里的速度是一个变量(变量数据对象),它的大小是4字节。它只保存整数数据。变量中的数据可以在其整个应用过程中进行更改

在数据对象中,如果存储常量数据,则这些数据对象称为contants。对于常量数据对象,禁用了rd_锁,但启用了写入_锁。这就是为什么您可以读取常量,但无法为其赋值。 要标识常量,需要为其声明一个名称。 Ex:int const speed=100; 这里的速度是一个常数(常数数据对象)。speed中的数据在其整个应用过程中不能更改。此速度仅保存感兴趣类型的数据。

那么为什么我们可以