在我的一项任务中,我看到使用了这一行:
int index = -1, k;
我不确定当一个变量有条目时会发生什么。 当它有两个条目时,变量“index”究竟是什么?
在C中,逗号运算符的优先级低于赋值运算符=
。 就这样,表达
int index = -1, k;
被解析为
//The parentheses are not legal in C, but it's what the parser does. int ((index = -1), k);
你看,该行声明了int
类型的变量。 第一个被称为index
并被初始化为-1
,第二个被称为k
并且未被初始化。
您可以在此处找到运算符优先级的概述:
请注意,逗号运算符是该列表中的最后一个!
同样,您可能会看到像这样的C代码或类似代码:
if(condition) foo += 7, doSomething(); while(i += 2, i < 42) ...;
这相当于
if(condition) { foo += 7; doSomething(); } i += 2; while(i < 42) { ... i += 2; }
但更简洁(许多C程序员喜欢简洁!)。 同样,在这两种情况下,逗号运算符用于将两个事物融合到单个语句中,这避免写入完整块{}
并防止重复增量i += 2
。
逗号运算符的这种使用是好还是坏都是品味和环境的问题。 但你可以肯定在野外找到它的所有可能的用途。
这是2个变量的定义,两者的类型相同: int
和index
。 只有index
用-1
初始化,并且k
未被初始化。
它只是定义了两个int
类型的变量,其中一个( index
)初始化为-1,另一个( k
)未初始化。
这是糟糕的风格,因为它看起来真的很混乱。
正如其他几个人所说,这是两个变量的声明。 它是100%相当于
int index = -1; int k;
和现代编码风格会鼓励你这样写。 然而 – 那里有很多旧的C,在20世纪80年代和90年代, 分组变量声明是首选的风格。 选择一个随机的尘土飞扬的甲板,我保证你会看到类似的东西
register f, r, (*hstat)(), (*istat)(), (*qstat)(); int status;
或者可能
extern char level; int newtry[31],newother[31],*r,*q,*p,n,sum,first; int ii,lastwhite,lastred;
所以你需要了解它的含义。 可悲的是,他们可能会很混乱,例如
int const* a, b;
这相当于
const int *a; int b;
而这就是为什么现代编码风格更喜欢每个声明的一个变量。
(为什么人们更喜欢在当天把声明分组?我不知道。就我个人而言,我猜它会帮助你在80×25玻璃杯上看到更多的代码,但我从来没有真正拥有过这种体验,所以。)
在此代码中,“index”和“k”都是整数类型变量,变量“index”由-1赋值。(即index的值为-1)。 它被称为变量初始化。
假设这是函数范围内的代码:
int index = -1, k;
会做同样的事情
int index = -1; int k;
或者相同的
int index, k; index = -1;
即使代码不等同于C标准,世界上没有任何已知的C编译器会将这三个代码块视为任何不同。
在C中你可以一次声明多个相同类型的变量( int index, k;
)或者你定义一个变量(同时声明和初始化一个变量, int index = -1;
),或者你可以在一次,声明多个并初始化它们或只是你的情况中的一个( int index = -1, k;
)。
以上就是c/c++开发分享C变量混乱相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549280.html