C语言学习心得
auto
变量和static
变量
-
auto
变量:每次执行到该变量定义语句时,都会产生一个新的变量,并且重新对此初始化。注意:该关键字在C语言与C++中的语义不同,在C++中是用于
变量类型自动推断
。为了让类似下面的代码能够在VS2022中运行而不报错,auto int a = 1;
要这样操作:
- 打开正在编辑的*.cpp文件的“属性”。
- 选择“C/C++”,然后选择“高级”。
- 在“编译为”选项中,选择“C代码”。应用并确定即可。
-
static
变量:表示静态变量。其初始化操作只在第一次执行时起作用
,在语句块执行期间,static变量将始终保持它的值。如下面例子:
#include <stdio.h> void click(){ static int sum = 0; sum++; printf("此时点击量:%d\n", sum); } int main(){ click(); click(); click(); click(); click(); return 0; }
输出为:
此时点击量:1 此时点击量:2 此时点击量:3 此时点击量:4 此时点击量:5
由此可见,sum的值并没有因为
click()
的反复执行而被初始化。
自增、自减运算符的操作顺序
n = ++i
或n = --i
:先自加或自减,再进行赋值操作。例如:
int i = 3; n = ++i; printf("n = %d", n);
变量
i
先自加再赋值给n,因此输出为:n = 4
n = i++
或n = i--
:先进行赋值操作,再自加或自减。例如:
int i = 3; n = i++; printf("n = %d", n);
变量
i
先赋值给n再自加,因此输出为:n = 3
(运算符号在前面就先运算,在后面就先赋值)
逗号运算符
逗号表达式的一般形式如下:
表达式1, 表达式2, ..., 表达式n
其求解过程是:先求解表达式1,再求解表达式2,一直求解到表达式n。整个逗号表达式的值是表达式n(最后一式)的值。
但是观察下面的表达式:
Value = 2+5, 1+2, 5+7;
上述语句中Value
的值是7,并非12。因为赋值运算符的优先级比逗号运算符高
,因此先执行赋值运算。
如果要先执行逗号运算,可以使用括号运算符
,代码如下:
Value = (2+5, 1+2, 5+7);
使用括号之后,Value
的值为12。
复合赋值运算符
该运算符返回运算得数
;如果连续使用
符合赋值运算符,遵循从右往左计算的原则。
如:
int iValue = 7;
iValue += iValue *= iValue /= iValue - 5;
printf("%d\n", iValue);
根据从右往左
的顺序,计算顺序如下:
- 计算
iValue /= iValue - 5
:先得出iValue - 5 = 2
,然后计算iValue /= 2
。iValue / 2 = 3.5
,由于iValue
是int
类型,所以直接去掉小数部分,得数为3
。- 计算
iValue *= 3
,即3 * 3 = 9
,得数为9。- 计算
iValue += 9
, 即9 + 9 = 18
,得数为18。
因此,打印结果为:
18
当int
值超出范围之后...
int
值的范围是-2147483648 - 2147483647
。当达到了能表示的最大值,会重新从起始点开始。
代码示例:
int a = 2147483647, b = -2147483648;
printf("%d %d\n", a, a + 1);
printf("%d %d\n", b, b - 1);
由于a
已经到达最大值,所以再加会重新返回最小值;而b已经达到最小值,所以再减会重新达到最大值。
因此,上述代码输出如下:
2147483647 -2147483648
-2147483648 2147483647
标签:int,学习心得,iValue,C语言,运算符,click,表达式,赋值 From: https://www.cnblogs.com/ziyangdev/p/17628432.html当然,对于其他的数据类型也是这样,可以将其看作指针体重秤,超过最大值就会返回最小值,(小于最小值就会达到最大值:虽然在体重秤上是不可能的)