
C
自己的一些理解和平常写的一些练习
、山有木兮木有枝
语法只是工具,算法才是灵魂
展开
-
C 语言库函数 memset 为什么只能初始化为0的原因详解
这是因为 memset 是根据字节来初始化的举个例子int main(){ int a[10]; //memset(a, 0, sizeof(int)*10); //memset(a, 1, sizeof(int)*10); memset(a, 2, sizeof(int)*10); for (auto e : a) cout << e << " "; cout << endl;}这里实际上是这样的//因为一个 int 是四个字节,所以 m原创 2020-05-20 20:37:09 · 1945 阅读 · 2 评论 -
动态内存管理
我们常用的内存开辟的方法有:int arr[10] = {0}; //在栈上开辟40个字节的连续空间int ret = 0; //在栈上开辟4个字节的空间但是上述的开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组...原创 2020-03-04 20:39:35 · 499 阅读 · 0 评论 -
双重嵌套结构体嵌套的调用
具体如下:typedef struct Student{ char name[10]; }Stu;typedef struct Qlist{ Stu p_1; //情况一 Stu* p_2; //情况二}Qlist;void print(Stu *ps){ printf("%s\n", ...原创 2020-02-06 21:42:24 · 3911 阅读 · 0 评论 -
sizeof 和 strlen 计算数组大小和长度详解
sizeof首先sizeof并非为一个函数,而是C语言中的一个关键字。sizeof计算对象所占内存的大小,判断操作数的类型长度,以字节为单位;指针在32位系统占4个字节,在64位系统占8个字节,本实例都在32位机器上操作。sizeof 求大小看的仅仅是它的类型大小,而非其他。所以我们在计算时只要认清楚它的类型大小就行。arr 和 &arr 的区别.int arr[10] = ...原创 2020-02-02 11:31:45 · 7101 阅读 · 2 评论 -
C语言实现通讯录
头文件contact.h部分代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAX 100typedef struct people { char name[20]; char sex[10]...原创 2019-11-17 21:36:29 · 2542 阅读 · 0 评论 -
C语言实现银行家算法
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<malloc.h>#include<string.h>#include<windows.h>void Init(int **arr,int row, int col) //赋值{ //int*...原创 2021-04-14 10:53:29 · 429 阅读 · 0 评论 -
预定义符、宏函数、条件编译详解
预定义符号:FILE //进行编译的源文件LINE //文件当前的行号DATE //文件被编译的日期TIME //文件被编译的时间STDC //如果编译器遵循ANSI C,其值为1,否则未定义。这些预定义符号都是语言内置的。 举个例子: printf("file:%s line:%d\n", __FILE_, __LINE__);宏:defi...原创 2019-12-01 15:18:57 · 464 阅读 · 0 评论 -
函数参数传递的方向:从右往左
先写一个小代码: void fun(int i, int j){ printf("%d %d\n", i, j);}int main(){ int i = 1; fun(i++, i++); return 0;}代码运行的结果大家都能猜出来,但是其实这有两种答案:一种是 2 1一种是 1 2为什么呢?其实跟我们所使用的编译器有关,绝大多数的编译器中函数传参...原创 2019-11-26 23:07:11 · 3452 阅读 · 2 评论 -
详解自定义类型:结构体,枚举,联合
结构体结构体的声明//例如描述一个学生信息struct Student // 方式一{ char name[20]; //姓名 char sex[5]; //性别 int age; //年龄 char tel[15]; //电话 char addr[30]; //地址}stu; // stu = struct Student stu; //struct ...原创 2019-11-24 22:01:14 · 451 阅读 · 0 评论 -
指针/指针数组/数组指针/指针常量/常量指针的概念解析
指针:一个变量的地址称为该变量的“指针”;简单来说,如果你去宾馆住宿,前台给你门卡并且告诉你房间在 666号,这时候你就能根据前台提供的地址精准的找到属于你自己的房间了。同理,指针就是指向变量的门牌号,通过指针,你就能找到它所指向的变量了。要注意的是:int* p 中,int * ->是整形指针类型, p -> 才是指针, * -> 解应用操作符。如果说指针是房间的门牌号...原创 2019-11-14 23:47:39 · 361 阅读 · 0 评论 -
模拟实现C语言库函数
1.模拟实现strlen//方式1.计数器方式int my_strlen(const char * str) { int count = 0; while(*str) { count++; str++; } return count; }//方式2.不创建临时变量计数器(递归)int my_strlen(const ch...原创 2019-11-13 21:56:38 · 177 阅读 · 0 评论 -
C语言实现两个int(32位)整数x和y的二进制表达中有多少个位(bit)不同?
代码如下:int test(int x,int y){ //方法一: 分别比较x和y二进制中每一位是否相同 int num = 0; for (int i = 0; i < 32; i++){ if (((x >> i) & 1) != ((y >> i) & 1)){ num+...原创 2019-10-26 21:02:59 · 524 阅读 · 0 评论 -
C语言获取一个数二进制序列中所有的偶数位和奇数位并分别输出其二进制序列。
代码如下:#include<stdio.h>void test(int n){ //方法一:从高位 -> 低位 顺序输出 for (int i = 31; i >0; i -= 2){ //偶数 printf("%d ", (n >> i) & 1); } printf("\n"); for (int i =...原创 2019-10-26 20:53:25 · 438 阅读 · 0 评论 -
C语言实现函数返回参数二进制中 1 的个数
举个例子:返回十进制255或者15转换成二进制后1的个数。#include<stdio.h>int count_one_bits1(unsigned int value){ //方法1:让value不断右移i位再和1 与(&) 若结果为1则说明此位置为1 ...原创 2019-10-26 20:44:52 · 288 阅读 · 0 评论 -
详解浮点数在内存中的存储
浮点数的家族包含:float, double, long double类型。先写一个演示代码:#include <stdio.h> int main() { //如果按照整形的存储方式来说理应是 float a = 5.0; // 00000000 00000000 00000000 0000...原创 2019-10-24 23:55:07 · 1081 阅读 · 0 评论 -
详解整形在内存中的存储(整形的截断和整形的提升)
大家都知道一个变量的创建是要在内存中开辟空间的。而空间的大小又是根据不同的变量类型而决定的。接下来就详细讲解一下数据在内存中是怎么存储的。首先我先来举一个例子:#include<stdio.h> int main() { int a = 20; int b = -10; return 0; }我们来看一看变量a,b在内存中的分布:...原创 2019-10-23 00:23:50 · 343 阅读 · 0 评论 -
C语言操作符详解
C语言操作符详解操作符的分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号操作符下标引用,函数调用和结构成员算数操作符:+ - * / %注意点:1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。2.对于/操作符,如果两个操作符都为...原创 2019-10-18 23:22:57 · 226 阅读 · 0 评论 -
C语言中实参与形参的传递
先写一个简单的数字交换代码; 塔的递归问题
Hanio(汉诺)塔问题是这样的:古代有一个梵塔,塔内有3座塔,用A,B,C来表示,开始在A塔上有64个大小不等的盘子,大的在下,小的在上。有人想要把64个盘子从A移到C上,每次只能移动一个盘子,且规定在移动的过程中3座塔上必须保证大盘在下,小盘在上。移动的过程可以使用空闲的那座塔。该怎么用程序去实现这个移动盘子的过程呢?首先...原创 2019-09-28 21:52:05 · 590 阅读 · 0 评论