常错知识总结1

文章目录

static

1. static修饰变量

a. 函数中局部变量:

  声明周期延长:该变量不随函数结束而结束

  初始化:只在第一次调用该函数时进行初始化

  记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值

  存储位置:不会存储在栈上,放在数据段

b. 全局变量

 改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用

c. 修饰变量时,没有被初始化时会被自动初始化为0

2. static修饰函数

改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用

指针

1:两个指针相减,指针必须指向一段连续空间,减完之后的结构代表两个指针之间相差元素的个数
2:指针中存储的是地址,地址可以看成一个数据,因此是可以比较大小的
3:整形指向的是一个整形的空间,解引用操作访问4个字节

算术转换

一:
32位系统下:
int占4个字节,指针表示地址空间个数,总共有2^32个,故占4个字节

64位系统下:
int占4个字节,指针表示地址空间个数,总共有2^64个,故占8个字节

二:

下面代码的结果是:
#include <stdio.h>
int i;
int main()
{
    
    
    i--;
    if (i > sizeof(i))
    {
    
    
        printf(">\n");
    }
    else
    {
    
    
        printf("<\n");
    }
    return 0; 
}

C语言中,0为假,非0即为真。

全局变量,没有给初始值时,编译其会默认将其初始化为0。

i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故实际应该选择>

猜你喜欢

转载自blog.csdn.net/qq_52988578/article/details/116892629