C语言中变量和数据对象的区别?
我在读C Primer Plus时遇到了以下几行我不理解的内容- 指针?它们是什么?基本上,指针是一个变量(或更多) 通常,一种数据对象,其值是内存地址 仅供参考,我在前面遇到了这些问题- 考虑一个赋值语句。它的目的是将一个值存储在 内存位置。数据对象是数据区域的通用术语 可用于保存值的存储器。C标准只使用 此概念的术语对象。识别对象的一种方法是 使用变量的名称C语言中变量和数据对象的区别?,c,variables,pointers,object,terminology,C,Variables,Pointers,Object,Terminology,我在读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