首页 > 其他分享 >C语言部分学习知识记录

C语言部分学习知识记录

时间:2023-10-18 09:33:09浏览次数:32  
标签:arr const 常量 记录 int 知识 C语言 char 存放

导包#include时候使用<>和""的 区别:

//<filename.h> ->去系统存放头文件的位置找.h文件

//"filename.h”->去当前目录寻找头文件,如果没找到再去系统存放头文件的位置找.h文件

main函数中参数意义

//int argc->从命令行传入的参数个数

//char* argv[]->存放参数的数组

//char* env[]->存放环境变量的数组

预编译到可执行文件

  1. gcc -E 1.c -o 1.i
  2. gcc -S 1.c -o 1.s
  3. gcc -C 1.c -o 1.o
  4. 链接 --> collect2.exe

环境变量

  1. 相同级别下越在前面的目录,执行优先级越高
  2. 不同级别下,系统级优先级更高

引用外部环境变量

extern char ** environ;


常量指针和指针常量

const int * pont = &i; //常量指针 const在左

int const * point = &i; // 常量指针 const在左

int * const point = &i; // 指针常量 const在右

数组访问

int arr[5]={1,2,3,4,5};

第一种:

arr[0]==>1

第二种

*(arr+0)==>1


自定义变量类型

 

.h文件中不允许定义,只能声明

数组传递时会丢失长度

int fun(int *arr, int len);
int arr[3]={1,2,3};
fun(arr,sizeof(arr)/sizeof(arr[0]));//直接arr会丢失长度,方法内获取长度时arr的长度为1

栈中元素有

局部变量

函数形参 ==》被调函数的局部变量

栈帧的指针信息

==栈中空间由操作系统开辟和释放==

全局变量存放位置

全局变量==》静态区

==bss==是未初始化变量存放空间

==data==是已初始化变量存放空间

静态存储区空间申请后默认为0,和数组初始化为0效果一样,所以数组初始化为0还是放在bss

static变量同样会放在静态区

栈中变量会随栈的结束而结束,而静态区中的变量不会

堆由程序员自己申请和释放,如果不释放,则会随进程结束而释放

内存定义

起始地址+长度

起始地址+结束标识

起始地址+

常量只读区

char *buff = "hello"; // 局部变量在栈
buff = "world"; // 指向改变
// 字符串"hello" "world" 放在常量区(常量区:只读)
// linux系统中通过size命令查看text字段

内存分区

4G内存:

核心:1G

静态区

只读区


C语言的结构体

struct和class区别

struct就是class,但是存在访问权限不同:

struct默认public

class默认private



打印对应的地址

0x12345678 在栈中按照

个位:78

十位:56

百位:34

千位:12

由低到高输出

栈顶为低位,栈底为高位

从栈顶输出78 ==》低位对应低位 ==》小端存储

==从千位入栈存储为小端存储==

==从个位入栈存储为大端存储==

二进制序列没有大小端概念


#pragma pack(1)

改变对齐参数(默认为4),改为1

  1. 从0开始计算
  2. 类型宽度为偏移量
  3. 偏移量为分子
  4. 对齐参数为分母
  5. 整除后进行填值
  6. 非整除则后移一位继续计算

例如:struct结构体中成员属性有

struct name{
  int age;
  char tag;
  int score;
  char sex;
}

分析(对齐参数为 4 ):

  1. int 对应4位
  2. char对应1位
  3. 从0开始计算
  4. 第0位可以存放第一个int 类型的age,占三位
  5. 第4位可以存放第二个char类型的tag,占 1 位
  6. 因为第三个score是int类型,占四位,而第5/6/7位无法整除4(对齐参数与类型占位取最小),所以空出
  7. 所以score从第8位填入到第11位
  8. 最后的char类型的sex从第12位开始到第15位,因为对齐参数为4,每一个都需要占4位

标签:arr,const,常量,记录,int,知识,C语言,char,存放
From: https://www.cnblogs.com/0099-ymsml/p/17771299.html

相关文章

  • 【问题记录】自定义注解处理程序 AbstractProcessor,总是提示版本不匹配
    1  前言最近在看注解处理程序,自己写一个 AbstractProcessor,发现有个莫名的提示:2 解决加上支持的版本即可,唉,折腾人。......
  • 【C语言】数组指针
    【C语言】数组指针顾名思义,数组指针是指向数组的指针。例如,p是一个指向含有3个int元素的一维数组的指针:int(*p)[3];//圆括号的优先级更高,让p先与*结合再与[]结合用法:#include<stdio.h>//voiddisplay1(intp[][3])//等价下行写法voiddisplay......
  • 日常记录--2023-10月17日--周二
    日程:今天只有上午有课,7点起床,吃了个早饭去上课,早上第一节数据结构,学习了队列,还讲了相关应用。中午午休一个小时,下午起来干了点别的,完善了之前的代码,晚上7-9点听了下代码随想路,学了会javaweb。学了什么:可恶的Javaweb,复习了数据结构。PS:不想学习,想要成为月饼盒;......
  • asisctf 2023 pwn nightjs 复现记录
    关于赛题asisctf2023nightjs附件一道js引擎题目,基于serenityOS上做的改编。(感觉serenity作者很强迫症善良得写了很多注释,连一行赋值语句都有注释,读起来超级愉悦)。偷看了别人的wp来复现。给了patch文件之后,查看修改处的函数被什么函数引用,漏洞点就很明了了。攻击流......
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点
    C#进阶简单数据结构类ArrayList元素类型以Object类型存储,支持增删查改的数组容器。因而存在装箱拆箱操作,谨慎使用。//ArrayListArrayListarray=newArrayList();//增=================array.Add("Hello");array.Add(true);array.Add("Tony");//添加单个元素array.Add(......
  • react native app 图标在安卓上内容被切割问题记录
    问题背景:reactnative开发app,设置的app图标在安卓中会被切割,导致周围的留白被切掉,看起来很奇怪。甚至有些文字内容被切割掉,显示不全。在不同手机上,icon可能会被切割成各种圆角,如果留白不够,内容可能会被切割。在iOS上icon也有相应的规范,比如需要1024尺寸等。解决方法:在查找......
  • Unity3D学习记录02——PloyBrush场景搭建
    首先在Window->PackageManager里面搜索PolyBrush,下载后将URP的Shader样例导入 导入后Asset文件夹下会有Sample的文件夹,在菜单栏Tools->PolyBrush->PolyBrushWindow打开窗口这个窗口最上面的五个,第一个是用来调整地形高低的,第二个是进行柔化场景的,第三个是调整颜色的,第四个......
  • 初入c语言学习
        hello,我是一名大一新生,2023/8/1开始在视频上跟着学习c语言。回顾前两个月,我对c语言的认识已经不停留在一门高深莫测的技术,也让我逐渐清晰自己想要什么,当然,与此相对应的就是付出比在暑假期间更多学习时间的决心。    在学习前,因对c语言认识有限,或者说对计算机这......
  • 10.17 小记录
    linktoproblem记录原因:自己做法代码长度太长。自己的做法:linktosubmission离线下来,离散化。题目是要求连续段的个数。Subtask$2$的做法考虑从大到小一个一个加入数。加入一个数的时候如果两边没有,答案加一;有一个,不变;都有,减一。预处理完\(O(1)\)一个询问。考虑先......
  • 记录--怎么写一个可以鼠标控制旋转的div?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助说在前面鼠标控制元素旋转在现在也是一个很常见的功能,让我们从实现div元素的旋转控制开始来了解元素旋转的具体原理和实现方法吧。效果展示体验地址code.juejin.cn/pen/7290719…实现步骤画一个div首先我......