C语言
文章平均质量分 60
Xiaov_
编程小白
展开
-
C++程序流程结构
文章目录程序流程结构选择结构循环结构程序流程结构C/C++支持最基本的三种结构:顺序结构,选择结构,循环结构循序结构:程序按顺序执行,不发生跳转选择结构:依据条件是否满足,有选择的执行相应功能循环结构:依据条件是否满足,循环多次执行某段代码选择结构一. if语句作用:执行满足条件的语句if语句的三种形式单行格式if语句多行格式if语句多条件的if语句单行格式if语句:if(条件){条件满足执行的语句}多行格式if语句:if(条件){ 条件满足执行的语句原创 2021-07-22 13:40:53 · 441 阅读 · 0 评论 -
C++运算符
文章目录运算符1.算术运算符2.赋值运算符3.比较运算符4.逻辑运算符运算符作用:用于执行代码的运算运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较,并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值1.算术运算符作用:用于处理四则运算算术运算符包括以下符号:运算符术语示例结果+正号+11-负号-1-1+加号10 + 515原创 2021-07-18 21:14:31 · 248 阅读 · 0 评论 -
C++基本数据类型
文章目录1. 整型2. 实型(浮点型)3.字符型4.字符串型5.布尔类型bool6.转义字符1. 整型作用:整型变量表示的是整数类型的数据C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:数据类型占用空间取值范围short(短整型)2字节(-2^15 ~ 2^15-1)int(整型)4字节(-2^31 ~ 2^31-1)long(长整型)windows为4字节,Linux为4字节(32位),8字节(64位)(-2^31 ~ 2原创 2021-07-18 21:11:50 · 1318 阅读 · 0 评论 -
指针的基本概念及使用
指针的概念,指针变量的概念,为什么要使用指针原创 2021-02-26 19:28:34 · 2489 阅读 · 0 评论 -
指针的步长及意义
不同类型的指针有何不同的意义指针变量+1后跳跃字节数量不同解引用的时候,取出字节数量不同指针变量+1后偏移的字节数不同代码演示:(不同编译器下偏移值可能不同)void test01(){ char * p1 = NULL; printf("%d\n", p1); printf("%d\n", p1 + 1);//+1偏移1个字节 int * p2 = NULL; printf("%d\n", p2); printf("%d\n", p2 + 1);//+1偏移4个字节 d原创 2021-04-05 23:37:32 · 551 阅读 · 0 评论 -
二级指针
指针的基本概念什么是指针:通过地址能找到所需的变量单元,因此说,地址指向该变量单元,将地址形象化的称为指针;什么是指针变量:存放指针(地址)的变量;指针变量的定义:类型名 * 指针变量名一个变量的指针的含义包含两个方面,一是存储单元的纯地址,二是指向存储单元的数据类型,故定义指针变量时要指定基类型,用来指定此指针变量可以指向的变量的类型;注释:& 取地址运算符。&a是变量a的地址;* 取内容运算符;间接访问运算符二级指针二级指针的概念:用来存放一级指针地址的指针 ,也原创 2021-03-26 21:35:55 · 2179 阅读 · 1 评论 -
指针易错点
指针越界void test01(){ char buf[9] = "HelloWord";//数组大小应该设为10 printf("buf:%s\n",buf);//会出现乱码,字符串末位没有加\0}返回局部变量地址char *getString(){ char str[] = "HelloWorld"; //局部变量,栈区申请的空间 printf("getString_str = %s\n", str); return str;} //随着函数调用结束,栈区的空间会被释放.原创 2021-04-09 22:10:40 · 115 阅读 · 0 评论 -
空指针和野指针
空指针(NULL)含义:特殊的指针变量,表示不指向任何东西;NULL是一个值为0的宏常量作用:指针变量创建的时候,可以初始化为NULL注意:不要对空指针进行解引用操作void test{ //指针变量 指向内存编号为0的地址 int *p = NULL;//创建指针变量的时候可以给指针初始化为NULL //printf("*p = %d\n",*p);内存地址0~255地址被系统占用,不可访问 printf("p = %d\n",p);// 打印输出 0}野指针含义:野指针指向一原创 2021-03-26 18:30:25 · 505 阅读 · 0 评论 -
无类型(void)和万能指针(void *)
无类型voidvoid用途:限定函数返回值;例如:void text()表示函数无返回值;限定函数的形参;例如:int text (void)表示函数没有参数传递,返回一个int类型的数据;通常省去void,直接写成int text ()注意:void不能像char 、 int 、double等类型那样定义变量,因为void是无类型,系统无法给void分配空间,不知道分配多大字节的空间。所以没有void类型的变量;万能指针void *任何类型的指针都可以直接赋值给void *类型的指原创 2021-03-26 19:57:03 · 657 阅读 · 0 评论 -
指针的间接赋值
变量的修改方式有两种:直接修改、间接修改通过指针可以进行间接赋值,间接赋值成立的条件为:两个变量(普通变量+指针变量)或者 (实参+形参)建立关系通过*操作指针指向的内存void changeValue(int *p){*p = 1000;}void test01(){//1 、一个普通变量 和一个指针变量 构成指针的间接赋值int a = 10;int * p = &a; //建立指针变量p和整型变量a的联系*p = 100;//通过解引用操作间接修改a的值p原创 2021-03-25 19:49:38 · 277 阅读 · 0 评论 -
const修饰的变量和指针
常量指针和指针常量的比较常量指针:指针指向内存区域的值不能修改,指针指向可以修改;const修饰的是*;*p只读,不可修改;p可读可写,p可以修改;int a =10;int b = 20;const int *p = &a;//等价于int const *p;const距离*近,const 修饰是*printf("*p = %d\n",*p);//*p可读,也就是a的值//*p = 30;//error:指针所指向的内存空间内容不可修改p = &b;//指针的指向可以原创 2021-03-26 14:12:17 · 328 阅读 · 0 评论 -
字符串常量和字符串变量
字符串常量有些编译器把多个相同的字符串常量看成一个(节省空间),有些则不进行此优化//1、字符串常量 vs下是可以共享的void test01(){ char * p1= "hello world"; char * p2 = "hello world"; char * p3 = "hello world"; printf("%d\n",&"hello world"); printf("%d\n", p1); printf("%d\n", p2); printf("%d\n"原创 2021-03-28 16:28:15 · 1397 阅读 · 0 评论 -
一维数组和二维数组的数组名
一维数组数组名是个指针常量,即指针的指向不可以修改,但指针所指向空间的值可以修改一维数组数组名除了两种特殊情况外,可以理解为指向第一个元素的指针两种特殊情况:sizeof数组名对数组名取地址int arr[5] = { 1, 2, 3, 4, 5 };//1、当sizeof数组名时候,统计是整个数组的大小printf("sizeof(arr) = %d\n", sizeof(arr));//2、当对数组名 取地址的时候printf("%d\n", &arr);print原创 2021-04-26 17:24:50 · 1281 阅读 · 0 评论 -
结构体内存对齐及规则
内存对齐的意义为什么要内存对齐:内存的最小单元是一个字节;CPU实际上将内存当成多个块,每次从内存中读取一个块,这个块的大小可能是2、4、8、16等。如果没有对齐,为了访问一个变量可能产生二次访问;有了内存对齐,可以提高操作系统访问内存的效率。我们来分析下非内存对齐和内存对齐的优缺点在哪?总结:结构体的内存对齐就是拿空间换时间的做法平台原因(移植原因):某些硬件平台只能在某些地址处取某些特定类型的数据 否则抛出硬件异常性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐为了访问未原创 2021-04-06 00:59:31 · 584 阅读 · 0 评论 -
#define定义宏常量和宏函数
宏函数概念:宏函数和宏常量都是利用#define定义出来的内容在项目中,经常把一些短小而又频繁使用的函数写成宏函数这是由于宏函数没有普通函数参数压栈、跳转、出栈返回等时间上的开销,可以调高程序的效率。注意事项: 宏函数通常需要加括号,保证运算的完整#define MYADD(x,y) ((x) + (y)) //宏函数//普通函数下的a、b都要进行入栈,函数执行后出栈int myAdd(int a ,int b)//普通函数{ return a + b;}//宏函数 在一定的场景下原创 2021-03-28 15:01:50 · 1606 阅读 · 0 评论 -
函数传参之值传递和地址传递
值传递函数传参的过程实际上是形式参数被实际参数赋值的过程;值传递:形式参数修改不了实际参数;void swap1(int num1,int num2){ int temp; temp = num1; num1 = num2; num2 = temp; printf("num1 = %d\n",num1); printf("num2 = %d\n",num2);}int main(){ int a = 1; int b = 2; swap1(a,b); printf("a原创 2021-03-26 22:55:30 · 641 阅读 · 0 评论 -
c语言字符串处理函数
文章目录输出字符串函数输入字符串函数测字符串长度函数字符串复制函数字符串连接函数字符串比较函数转换为小写的函数转换为大写的函数输出字符串函数一般形式:puts(字符数组)作用:将一个字符串(以’\0’结束的字符序列)输出到终端;在用puts函数输出时将字符串结束标志’\0’转换成’\n’,即输出完字符串后换行;相当于printf("%s\n",字符数组);输入字符串函数一般形式:gets(字符数组)作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值时字符串起始地址;注意:原创 2021-02-27 16:47:53 · 220 阅读 · 0 评论 -
链表的实现(c语言描述)
文章目录链表的概念(单链表)链表与数组链表的增删改查链表的动态创建链表的概念(单链表)1.链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表与数组链表与数组的区别数组静态分配内存,链表动态分配内存。数组在内存中是连续的,链表是不连续的。数组利用下标定位,链表通过遍历定位元素。数组插入和删除需要移动其他元素,链表的插入或删除不需要移动其他元素。数组的优缺点随机访问性比较强,可以通过下标进行快速定位。查找速度快插入和原创 2021-03-20 14:58:25 · 238 阅读 · 0 评论