C语言的一些问题(0)

C语言的一些问题(0)

admin 2019年6月5日

左值: 左值用来指明一个对象的表达式,最简单的左值就是变量名称。可以出现在赋值运算符左边。从一个左值必定可以解析出对应对象的地址,除非该对象是位字段或者是寄存器存储类。生成左值的运算符[]和*。。。。对象可以声明为常量,这样他是左值但是不可以放在赋值运算符左边。

副作用和序列点: 计算表达式会导致环境变化,这种变化被称为副作用。 在程序执行过程中,有一些确定的点,在这些点上,一个给定的表达式所有副作用都会被完成,而下一个表达式的副作用尚未发生。这些点被称为序列点。 比如: int i=1; i=i++; 运行结果不确定!!!! 最重要的序列点一般出现在以下位置:

  • 当函数被调用时,在函数所有实参被计算之后,在执行权传递给函数内的语句前
  • 在表达式末端,并且该表达式不是更大的表达式的一部分。
  • 在 && || ?: , 第一个操作数计算完后

因此表达式++i<100?f(++i):(i=0)是合法的,因为在第一个++i和第二个++i或i=0之间有个序列点。

泛型选择:

_Generic(控制表达式,泛型组合…)

泛型组合有俩种:

1.类型名称:表达式

2.default:表达式

数组与指针的隐式转换:

当出现以下情况数组不会隐式转换为指针:

  • 当数组是sizeof的操作数时
  • 当数组是&的操作数时
  • 当用字符串字面量初始化一个char,char16_t,char32_t,wchar_t数组时
内存对齐:
   _Alignof判断类型的对齐,_Alignas判断一个对象的对齐。
    基础对齐值:小于等于_Alignof(max_align_t)
    扩展对齐:大于。。。
    _Alignas(type)等效于_Alignas(_Alignof(type))。。。包含头文件stdalign.h使用alignas和alignof

发表评论

电子邮件地址不会被公开。 必填项已用*标注