C语言 内存分析 数组知识点整理

内存分析

  1. 在计算机中1个字节占用8位
  2. 定义变量的目的就是为了在内存中开辟一块存储空间
  3. 定义变量时指定数据类型的目的就是为了告诉计算机需要开辟多大的存储空间
  4. char在内存中占用一个字节, int在内存中占用4个字节, double在内存中占用8个字节sizeof(char);sizeof(int);sizeof(double);

内存分配的规则

  • 计算机分配内存的规则: 从大到小的分配
  • 变量名称对应的是变量占用内存最小的那个字节

ASCII码

总结: 字符存储的顺序:

  1. 根据字符在ASCII码表中找到对应的十进制数
  2. 将找到的十进制数转换为二进制
  3. 将转换好的二进制存储到内存中

类型说明符

  • 类型说明符一般都是用于修饰int类型的
    • 1.说明长度的
     * short---- > %hi --占位符
     * long ---- > %li --占位符
     * long long ---- > %lli --占位符
     * ------------------------------------
     * char 1个字节  -2^7~2^7-1  -128~127
     * short int 2个字节 -2^15~2^15-1
     * int  4个字节  -2^31~2^31-1
     * long int:
     * 如果在32位编译器中, long int 占用4个字节
     * 如果在64位编译器中, long int 占用8个字节
     *
     * long long int 8个字节 -2^63~2^63-1

注意点:

  1. 如果存储的数据超出了类型对应的取值范围, 那么就会导致存储的数据不对
  2. 由于内存非常有限, 所以在编写程序的时候, 尽量合理的定义变量
  3. C语言不看怎么存, 只看怎么取

说明符号位的

  • unsigned 无符号的:

  • 不把二进制的第一位当做符号位来使用, 所以只能存储0正数, 不能存储负数

  • 注意点:

  • 如果变量被unsigned修饰了, 那么取出的时候必须使用%u, %u就代表用无符号的方式取出

unsigned int num1 = -6;

printf("num1 = %u\n", num1);
  • 应用场景: 存储银行存款, 学生的分数等不能出现负数的情况

signed 有符号的:
默认int就是有符号的, 就可以保存负数,零,正数, 所以signed一般用不上


数组

  1. 应用场景
  • 如果想要同时保存多个``相同类型的数据的时候, 就要想到数组
  1. 定义数组格式:
  • 元素类型 数组名称[元素个数];
int arr[2];  // 定义int 类型的数组 arr

数组的初始化

1. 定义的同时初始化 (完全初始化)

 int ages[4] = {1, 3, 5, 7};
  • 注意点:如果定义的同时初始化, 并且没有指定元素的个数, 那么元素的个数就是初始化*的个数
  • 如果只进行了部分初始化, 那么没有被初始化的元素会赋值为0
  1. 先定义再初始化
  • 注意点:
  • 如果定义的同时不初始化, 那么元素的个数不能省略
  • 2.如果先定义再初始化, 那么就不能一次性初始化,逐个初始化

先定义再初始化(部分初始会)

  • 如果只进行了部分初始化, 那么没有被初始化的元素不会赋值为0

遍历数组

  • 概念
    遍历数组就是取出数组中存储的所有数据, 我们就称之为遍历数组
//这是遍历数族的函数
void printArray(int arr[],int length){
    for(int i=1;i<length;i++){
        printf("arr[%i] = %i\n",i,arr[i]);
    }
}

注意点

  • 在遍历数组的时候, 循环结束的条件不要写死
  • 规律: sizeof(数组名称) 可以得到该数组占用的内存总大小
printf("sizeof(arr) = %i\n", sizeof(arr));
  • 规律: sizeof(数组元素) 可以得到该元素占用的内存大小,从而计算数组的长度
  • 数组占用的内存 / 单个元素占用的内存 = 数组的长度(length.arr)
printf( " sizeof(  arr[1]) = %i\n",   sizeof(arr[1])  );
printf( " length = %i\n"  ,   sizeof(arr)   /   sizeof(arr[1])  );
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 10,874评论 1 22
  • C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...
    一生信仰阅读 4,927评论 0 2
  • 一年一朵,外出是第一年
    天蝎爱吃糖阅读 3,089评论 0 0
  • 假如在一个本该奋斗的年纪,选择了安逸的混日子,那么未来该会是什么样子? 观望了许久的《简书》平台,我终于也要慢慢遗...
    简书你的猿阅读 3,573评论 0 3
  • 有时候运气太好感觉自己拥有超能力 我说深海里面会下雪 我说山那边短短耳朵小兔子在打喷嚏 我...
    岩舟阅读 851评论 0 1