C语言学习心得

发布时间 2023-08-14 13:54:25作者: 雏扬

C语言学习心得

auto变量和static变量

  1. auto变量:每次执行到该变量定义语句时,都会产生一个新的变量,并且重新对此初始化。

    注意:该关键字在C语言与C++中的语义不同,在C++中是用于变量类型自动推断。为了让类似下面的代码能够在VS2022中运行而不报错,

    auto int a = 1;
    

    要这样操作:

    1. 打开正在编辑的*.cpp文件的“属性”。
    2. 选择“C/C++”,然后选择“高级”。
    3. 在“编译为”选项中,选择“C代码”。应用并确定即可。
  2. 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()的反复执行而被初始化。

自增、自减运算符的操作顺序

  1. n = ++in = --i自加或自减,进行赋值操作。

    例如:

    int i = 3;
    n = ++i;
    printf("n = %d", n);
    

    变量i先自加再赋值给n,因此输出为:

    n = 4
    
  2. 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);

根据从右往左的顺序,计算顺序如下:

  1. 计算iValue /= iValue - 5:先得出iValue - 5 = 2,然后计算iValue /= 2iValue / 2 = 3.5,由于iValueint类型,所以直接去掉小数部分,得数为3
  2. 计算iValue *= 3,即3 * 3 = 9,得数为9。
  3. 计算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

当然,对于其他的数据类型也是这样,可以将其看作指针体重秤,超过最大值就会返回最小值,(小于最小值就会达到最大值:虽然在体重秤上是不可能的)