在c / c ++

时间:2016-06-28 17:52:57

标签: c++ c operators

我正在查看cuda c编程指南指南中的代码段http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#atomic-functions

在他们给出的片段中有一个声明,它让我陷入了一个循环,我在解释它时遇到了一些麻烦......

unsigned long long int old = *address_as_ull, assumed;

我在SE上经历了几个类似的问题,我想我已经得到了它但我仍然不确定......我对所指示的行的解释是它相当于:

unsigned long long int old = *address_as_ull;
unsigned long long int assumed;

假设我是对的,我真的不明白为什么,或者发生了什么。我知道我可以做点什么

int a,b,c;

声明3种类型的整数,但是当我在一行中混合赋值和声明时会发生什么?

2 个答案:

答案 0 :(得分:3)

你是对的:

unsigned long long int old = *address_as_ull, assumed;

与此相同:

unsigned long long int old = *address_as_ull;
unsigned long long int assumed;

声明一个或多个变量时,可以选择指定初始值设定项。

来自C standard的第6.7节:

  

6声明说明符由一系列序列组成   指示链接,存储持续时间和部分的说明符   声明符所表示的实体类型。的的   init-declarator-list是逗号分隔的序列   声明者,每个都可能有其他类型   信息或初始化程序,或两者兼有。声明者   包含声明的标识符(如果有)。

答案 1 :(得分:0)

也许有人会提出一个技术上更准确的答案,但这里有一个可能有帮助的轶事。

int a,b,c;被解释为"为一个名为'''"

的整数分配足够的字节

old = *address_as_ull*被解释为"为3个整数分配足够的字节,称为' a',' b'和' c'& #34;

你可以将认为作为函数调用的equals运算符返回它所作用的相同引用。所以"返回" old的值为int fact(int n); int a = 1, // an integer *p = new int(2), // a pointer initialized with the value 2 (*fp)(int) = fact; // a function pointer to the function fact()

作为旁注,你也可以混合和匹配指针,只要"结果"是一个整数。

conf:HConf

除了这种轶事之外,我所能说的就是这样,因为有人认为它是这样的,那就是标准"。能够以这种方式声明具有相同类型的许多变量很方便。也许它可以帮助编译器进行优化(真的可以说)。但当然没有理由这样。