·指针运算

-指针+-整数

-指针+-指针

    指针-指针的绝对值是指针之间的元素个数


    -模拟计算字符串长度

      1)计数器

      2)递归

      3)指针运算


-指针的关系运算

·标准规定:

 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,

 但是不允许与指向第一个元素之前的那个内存位置的指针进行比较


·指针和数组


-数组名 —> 首元素地址

例外:&数组名,取出的是整个元素的地址

        sizeof(数组名)计算的是整个数组的大小


-通过指针访问数组


-二级指针和多级指针


·指针数组

·数组指针

·数组的长度即为数组中的元素个数

·全局变量不初始化默认为0

·sizeof( )计算变量/类型所占内存的大小,结果为无符号数

-当一个有符号数与一个无符号数进行比较时,

需先把有符号数转变为无符号数(将补码的符号位转变为有效位)


·位操作符

& 按位与

| 按位或

^ 按位异或

<<左移操作符

>>右移操作符

~按位取反


·结构体

-struct 结构体关键字

-结构体标签

-结构体的成员可以是标量、数组、指针和其它结构体

·结构体成员的访问

·函数参数传参时需要压栈

-函数栈帧的创建和销毁

学习随机_4_指针运算

学习随机_4_指针运算_02

·调试(debug)

-Debug 调试版本

    包含调试信息,并且不作任何优化,便于程序员调试程序

-Release 优化版本

    进行了各种优化,使程序在大小和运行速度上最优(大小和功能)

·断点的设置(F9)

    使程序在断点处停止执行

·监视窗口

    自由度较高

·自动调试窗口

·局部变量窗口

·内存窗口

·反汇编

·寄存器

·调用堆栈

    反馈函数的调用逻辑

·利用栈区时从高地址向低地址

数组元素随下标的增大,其地址逐渐上升

·写出易于调试的代码

 -利用assert( )

  断言

 -const的修饰

    修饰常量(*p)

    修饰指针本身(p)

·常见错误

1.  -编译型(语法)错误

    看错误提示信息

    发现和解决较简单

2.  -链接型错误

    看错误提示信息

    主要找到其中的标识符,然后定位问题所在

    一般是标识符名不存在或拼写错误

3.  -运行时错误

    借助调试

    逐步定位问题


·数据的存储

-数据类型

    ~内置类型(语言本身具有)

    ~自定义类型(构造类型)

·类型的意义

1,决定使用这个类型开辟内存的大小

2,决定看待内存的视角


·内置类型

-整形家族:

char(存储ASCII码值)

    ~unsigned char

    ~signed char

short

int

long      

-浮点型家族

float

double


·构造类型

 ~数组类型 int [n]

 ~结构体类型 struct

 ~枚举类型 enum

 ~联合类型 union


·指针类型


·整形在内存中的存储

计算机中的有符号整形有三种表示方法

原码  反码  补码

三种表示方法均有符号位和数值位两部分

有符号数 原码补码反码不相同

 正数三码相同

无符号数 原码反码补码相同

-整数存放的是补码

 意义:便于CPU的运算(CPU只有加法器)

·指针类型的意义

1.决定了指针解引用操作时能访问几个字节

2.决定了指针的步长


·大端小端


-大端(存储)模式(大端字节序存储模式),

    数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中

-小端模式,

数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中

学习随机_4_数据类型_03

·有符号char 10000000直接翻译为 -128

-有符号char的范围是 [-128,127]  

-无符号char的范围是 [0,255]

 limits.h中可查

学习随机_4_调试_04

·无符号数容易导致死循环