C
C语言相关知识
乌克兰水晶小乳猪
一个计算机专业的学生
展开
-
位段的讲解
什么是位段?位段的成员必须是int,unsigned int,signed int。比如:struct A{ int _a : 2; int _b : 5; int _c : 10; int _d : 30;};A就是一个位段类型。那么位段的大小是多少呢?printf("%d\n", sizeof(struct A));//8位段的内存分配位段的成员可以是 int...原创 2019-09-17 17:48:01 · 681 阅读 · 0 评论 -
枚举、联合的讲解
枚举枚举顾名思义就是一一列举。 把可能的取值一一列举。枚举类型的定义enum Day{ Mon, Tues, Wed, Thur, Fri, Sat, Sun};enum Sex{ MALE, FEMALE, SECRET};以上定义的enum Day,enum Sex都是枚举类型。{}中的内容是枚举类型的可能取值,也叫枚举常量 。这些可能取值...原创 2019-09-17 18:28:26 · 262 阅读 · 0 评论 -
整型在内存中的存储(原码、反码、补码)
整型在内存中的存储我们谈谈数据在所开辟内存中到底是如何存储的?比如:int a = 20;int b = -10;我们知道 a 分配四个字节的空间。那如何存储?下面让我们看三个概念:符号位都是用0表示“正”,用1表示“负”。原码:直接将二进制按照正负数的形式翻译成二进制就可以。反码:将原码符号位不变,其他位按位取反就可以得到了。补码:反码+1就得到补码。正数的原、...原创 2019-09-11 16:16:29 · 1856 阅读 · 0 评论 -
大小端的介绍
大小端概念大端模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。小端模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。百度2015年系统工程师笔试题:请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)#include<stdio.h>#include<stdlib....原创 2019-09-11 17:14:28 · 423 阅读 · 0 评论 -
memmove函数的介绍以及模拟实现
memmovevoid * memmove ( void * destination, const void * source, size_t num );和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果源空间和目标空间出现重叠,就得使用memmove函数处理。...原创 2019-09-16 18:32:28 · 424 阅读 · 0 评论 -
memcpy函数的介绍以及模拟实现
memcpyvoid * memcpy ( void * destination, const void * source, size_t num );函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 ‘\0’的时候并不会停下来如果source和de...原创 2019-09-16 17:51:43 · 403 阅读 · 0 评论 -
strstr、strtok、strerror函数的介绍与使用
strstr函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分。如果未找到所搜索的字符串,则返回 false。char * strstr ( const char *, const char * );就举栗子说明问题吧#include<stdio.h>#include<windows.h>int main(){ char s...原创 2019-09-16 17:16:55 · 735 阅读 · 0 评论 -
结构体内存对齐、修改默认对齐数
结构体内存对齐计算结构体的大小。 这也是一个特别热门的考点: 结构体内存对齐先做几个练习感受感受//练习1struct S1{ char c1; int i; char c2;};printf("%d\n", printf(struct S1);//12//练习2 struct S2 { char c1; char c2; int i...原创 2019-09-17 16:16:27 · 1640 阅读 · 0 评论 -
结构体的讲解
结构体的声明结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构体的声明int main(){ struct tag { member-list; }variable-list;举个栗子⑧: typedef struct Stu { char name[20];//名字 int age;//年龄 char sex...原创 2019-09-10 18:56:19 · 463 阅读 · 0 评论 -
计算 1!+2!+3!+……+10!
#include<stdio.h>#include<stdlib.h>int A(int n){ int tmp = 1; for (int i = 1; i <= n; i++) { tmp *= i; } return tmp;}int main(){ int sum = 0; for (int i = 1; i <= 10; ...原创 2019-09-07 15:43:34 · 2044 阅读 · 0 评论 -
计算n的阶乘
#include<stdio.h>#include<stdlib.h>int main(){ int n; int tmp = 1; scanf("%d", &n); for (int i = 1; i <= n; i++) { tmp *= i; } printf("%d\n", tmp); system("pause"); re...原创 2019-09-07 15:34:37 · 300 阅读 · 0 评论 -
循环语句(while、for、do...while)(有两个重要的代码以及你错过的笔试题)
循环语句从下面这三个进行讲解:whilefordo whilewhile循环while语句中的break和continuebreak介绍#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; while (i <= 10) { if (i == 5) brea...原创 2019-09-07 15:29:12 · 437 阅读 · 0 评论 -
strncpy,strncat,strncmp函数的介绍
strncpychar * strncpy ( char * destination, const char * source, size_t num );拷贝num个字符从源字符串到目标空间如果源字符串的长度小于num,则拷贝完源字符串之后,在目标后边追加0,直到num个。strncatchar * strncat ( char * destination, const char...原创 2019-09-16 16:27:56 · 471 阅读 · 0 评论 -
strcmp函数的介绍以及模拟实现
strcmp函数int strcmp ( const char * str1, const char * str2 );第一个字符串大于第二个字符串,则返回大于0的数字第一个字符串等于第二个字符串,则返回0第一个字符串小于第二个字符串,则返回小于0的数字模拟实现int my_strcmp(const char* dest, const char* src){ int ret ...原创 2019-09-16 15:31:35 · 301 阅读 · 0 评论 -
strcat函数的介绍以及模拟实现
strcat函数(追加)char * strcat ( char * destination, const char * source );源字符串必须以 '\0’结束目标空间足够大,能够容纳的下源字符串的内容目标空间可修改字符串自己给自己追加?模拟实现模拟实现char* my_strcat(char * dest, const char * src){ assert(d...原创 2019-09-16 12:37:50 · 319 阅读 · 0 评论 -
strcpy函数的介绍以及模拟实现
strcpychar* strcpy(char * destination, const char * source );源字符串必须以 ‘\0’ 结束;会将源字符串中的’\0’ 拷贝到目标空间目标空间足够大,以确保能存放源字符串目标空间必须可变学会模拟实现strcpy的模拟实现//较为直观的一中写法char* my_strcpy(char * dest, const ch...原创 2019-09-16 12:27:27 · 226 阅读 · 0 评论 -
strlen函数介绍以及模拟实现
strlensize_t strlen ( const char * str ); 字符串以 ’ \0 ’ 作为结束标志,strlen函数返回的是在字符串中 ’ \0 ’ 前面出现的字符个数(不包括’ \0 ')参数指向的字符 必须要以’ \0 '结束注意函数的返回值为size_t,是无符号的(易错)学会strlen函数的模拟实现举个例子说明这个函数:#include<s...原创 2019-09-15 14:15:58 · 294 阅读 · 0 评论 -
函数的递归(有经典练习题,复习一定要看)
函数递归什么是递归?程序调用自身的编程技巧称为递归。递归的主要思考方式在与:把大事化小练习1:接受一个整型值(无符号),按照顺序打印它的每一位。 例如: 输入:1234,输出 1 2 3 4.#include<stdio.h>#include<stdlib.h>void Print(int n){ if (n > 9) { Print...原创 2019-09-08 16:25:49 · 3106 阅读 · 0 评论 -
函数的参数(形参与实参)的理解
函数的参数实际参数(实参)真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们必须有确定的值,以便把这些值传送给形参。形式参数(形参)形式参数是指函数名后括号中的变量。因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。我们写...原创 2019-09-08 11:22:08 · 34451 阅读 · 5 评论 -
库函数、自定义参数 的讲解
库函数为什么会有库函数?我们都知道在我们学习C语言编程的时候,总是在一个代码编写完成之后破壁机带的想知道结果,想把这个把这个结果 打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格式打印到屏幕上 (printf)在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。像上面我们描述的...原创 2019-09-08 10:24:27 · 557 阅读 · 0 评论 -
两个数组的交集2
class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> s1; for (auto e : nums1) { s1[e]++;...原创 2019-10-04 18:26:44 · 244 阅读 · 0 评论 -
两个数组的交集1
class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //对num1去重 unordered_set<int> s1; for(auto e:num...原创 2019-10-04 17:31:30 · 259 阅读 · 0 评论 -
二维数组的创建、初始化、使用以及在内存中的存储
二维数组的创建和初始化//数组的创建 int arr[3][4]; char arr[3][5]; double arr[2][4]; //数组的初始化 int arr[3][4] = { 1, 2, 3, 4 }; int arr[3][4] = { { 1, 2 }, { 4, 5 } }; int arr[][4] = { { 2, 3 }, { 4, 5 } };二维...原创 2019-09-08 18:04:07 · 502 阅读 · 0 评论 -
一维数组的创建、初始化、使用以及在内存中的存储
一维数组的创建和初始化数组的创建数组是一组相同类型元素的集合。数组的创建方式:type_t arr_name[const_n]//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小数组创建的实例://代码1int arr1[10];//代码2int count = 10;int arr2[count];//这样不可以哦//代码3...原创 2019-09-08 17:28:49 · 774 阅读 · 0 评论 -
指针和数组笔试题解析(容易混乱)
//一维数组 int a[] = { 1, 2, 3, 4 }; printf("%d\n", sizeof(a));//16 printf("%d\n", sizeof(a + 0));//4 printf("%d\n", sizeof(*a)); //4 printf("%d\n", sizeof(a + 1));//4 printf("%d\n", sizeof(a[1]));...原创 2019-09-14 19:35:20 · 312 阅读 · 0 评论 -
函数指针、函数指针数组
函数指针#include <stdio.h> void test() { printf("hehe\n");} int main(){ printf("%p\n", test); printf("%p\n", &test); return 0; }输出的是两个地址,这两个地址是 test 函数的地址。 那我们的函数的地址要想保...原创 2019-09-14 14:39:10 · 309 阅读 · 0 评论 -
指针数组、数组指针
指针数组在前面的博客里,我们已经学过了指针数组。指针数组是一个存放指针的数组。自行复习哦。。。。数组指针数组指针的定义:数组指针是数组? 还是指针?答案:指针。我们已经熟悉:整型指针:int pint;能够指向整型数据的指针。浮点型指针:floatpf;能够指向浮点型数据的指针。那么数组指针应该是:能够指向数组的指针。下面代码哪个是数组指针?int *p1[10];int ...原创 2019-09-14 13:42:08 · 304 阅读 · 0 评论 -
字符指针讲解(有面试题)
字符指针在指针的类型中我们知道有一种指针类型为字符指针char*一般是这样使用的:int main(){ char ch = 'w'; char* pc = &ch; *pc = 'w'; system("pause"); return 0;}还有一种使用方式如下:int main(){ char* pstr = "hello bit";//把字符串放到pst...原创 2019-09-11 17:42:06 · 346 阅读 · 0 评论 -
指针数组
指针数组指针数组是指针还是数组?答:是数组。存放指针的数组。数组我们已经知道整型数组,字符数组。让我们回顾一下整型数组和字符数组。int arr1[5];char arr2[5];那指针数组是怎样的?int* arr3[5];//是什么?arr3是一个数组,有五个元素,每个元素是一个整形指针。...原创 2019-09-10 17:44:41 · 245 阅读 · 0 评论 -
指针和数组名(指针访问数组)以及二级指针
指针和数组既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。让我们看下面代码:#include<stdio.h>#include<stdlib.h>int main(){ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int *p = arr;//指针存放首元素的地址 int sz...原创 2019-09-10 17:28:12 · 724 阅读 · 0 评论 -
指针和指针类型(指针+-数组以及指针的解引用)
这里我们在讨论一下:指针的类型 我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢? 准确的说:有的。看下边这段代码: int num = 10; p = #要将&num(num的地址)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的呢? 我们给指针变量 相应的类型。char *pc = NULL; int *pi = NULL...原创 2019-09-10 16:31:33 · 364 阅读 · 0 评论 -
指针是什么?
指针是什么?指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在 电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。那我们可以这样理解:内存指针指针是个变量,存放内存单元的地址(编号)让我们写一个代码感受一下:#inc...原创 2019-09-10 16:18:27 · 4831 阅读 · 1 评论 -
初识C语言 - 指针
指针内存内存是电脑上特别重要的东西,计算机中所有的程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是1字节。为了能够有效访问到内存的每个单元,就给内存单元进行了编号。这些编号被称为该内存单元的地址。地址即编号。变量都有地址,取出变量地址如下:#include<stdio.h>#include<stdl...原创 2019-09-06 18:08:26 · 364 阅读 · 0 评论 -
初识C语言 - 常见关键字(typedef,static,#define)
关键字auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch type...原创 2019-09-06 17:19:19 · 389 阅读 · 0 评论 -
初识C语言 - 选择语句、循环语句
选择语句如果你好好学习,校招时就能拿一个好offer,走上人生巅峰。如果你不好好学习,毕业等于失业,回家卖卖红薯。这就是选择!#include<stdlib.h>#include<stdio.h>int main(){ int coding = 0; printf("你会敲代码吗?(选择1 or 0):>"); scanf("%d", &c...原创 2019-09-06 16:33:50 · 259 阅读 · 0 评论 -
字符分类的函数(比如大写字母转小写的函数)
字符分类的函数函数如果它的参数符合下列条件就返回真iscntrl任何控制字符isspace空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v‘isdigit十进制数字0~9isxdigit十六进制数字,包括所有十进制数字,小写字母 a~f,大写字母A ~Fislower小写字母a~zis...原创 2019-09-16 17:34:38 · 348 阅读 · 0 评论 -
初识C语言 - 数据类、变量、常量、字符串、转义字符、注释
数据类型char字符数据类型short短整型int整型long长整型long long更长的整型float单精度浮点数double双精度浮点数为什么出现这么多类型呢?每种类型的大小是多少?#include<stdio.h>#include<stdlib.h>int main(){ prin...原创 2019-09-06 16:04:36 · 253 阅读 · 0 评论 -
动态内存管理
为什么存在动态内存分配int val = 20;//在栈空间上开辟四个字节char arr[10] = { 0 };//在栈空间上开辟10个字节的连续空间上边代码有两个特点:1.开辟空间的大小是固定的。2.数组在声明的时候,必须是指定数组的长度,它所需要的内存在编译时分配。==但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编 译时开...原创 2019-03-04 19:00:33 · 258 阅读 · 0 评论 -
初学位段和联合的知识
位段位段(成员必须是整型) char也属于整型家族struct S{int _a : 2;//代表a占两个字节,一个字节八个比特位int _b : 5;int _c : 10;int _d : 30;};int main(){printf("%d\n", sizeof(struct S));system(“pause”);return 0;}位段的内存分配1.位段的...原创 2018-11-23 20:54:33 · 267 阅读 · 0 评论 -
初学结构体的知识总结
结构体结构体类型的创建struct Student{char name[20];short age;char sex[5];}stu1,stu2,stu3;int main(){struct Student stu4;return 0;}匿名结构体匿名结构体struct{char name[20];short age;char sex[5];}stu1;s...原创 2018-11-23 20:45:30 · 523 阅读 · 0 评论