C语言琐碎

141 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

算法的狭义定义中对不同的存储结构,要完成某一个功能所执行的操作是不一样的。 比如:

    要输出数组中所有的元素的操作和
    要输出链表中所有元素的操作肯定是不一样的
    

这说明:

    算法是依附于存储结构的
    不同的存储结构,所执行的算法是不一样的
    
    

算法的广义定义中无论数据是如何存储的,对该数据的操作都是一样的。

int a[10] = {......};
int * pH = a;

for(i = 0;i<10;i++)
{
    printf("%d\n",*pH);
    pH++;
}

位运算符

& -- 按位与
&& -- 逻辑与  也叫并且
&&与&  的含义完全不同
1&1 = 1
1&0 = 0
0&1 = 0
0&0 = 0

5&7 = 5      21&7 = 5

| -- 按位或
|| -- 逻辑或
1|1 = 1
1|0 = 1
0|1 = 1
0|0 = 0

~ -- 按位取反
~i就是把变量i的所有二进制位取反

^ -- 按位异或
    相同为0
    不同为1
    1^0 = 1
    0^1 = 1
    1^1 = 0
    0^0 = 0
    
 << -- 按位左移
     i<<3表示把i的所有二进制位左移三位,右边补零
     左移n位相当于乘以2的n次方
 >> -- 按位右移
     i>>3表示把i的所有二进制位左右移三位,左边一般补零,也可能补1.
     右移n位相当于除以2的n次方

位运算的现实意义

   通过位运算我们可以对数据的操作精确到每一位。
   

分配内存:

  操作系统把某一块内存空间的使用权利分配给程序。

释放内存:

  操作系统把分配给该程序的内存空间的使用权利收回,该程序就不能够再使用这一块内存空间,释放内存并非将该内存的内容清零。

变量如果不初始化,通常就会成为垃圾值。

地址是内存单元的编号  指针就是地址 指针和地址是同一个概念
指针变量是存放内存单元编号的变量  指针变量和指针是两个完全不同的概念
只不过人们通常把指针变量简称为指针

二进制全部为零的含义 --0000000的含义:

    1.数值零
    2.字符串结束标记符‘\03.空指针NULL
        NULL本质也是零,而这个零不代表数字零,而表示的是内存单元的编号零
        计算机规定了以零为编号的存储单元的内容不可读,不可写