C语言
文章平均质量分 73
ywl470812087
个人简介:深耕物联网行业,ERP,CSDN博客专家。 任职华为网联网智慧照明、空调资深工程师,并且上线投产使用,研发企业亿量级吞吐中间件。 擅长 Java语言、C语言等。
展开
-
解决scanf_s函数报错:没有为格式字符串传递足够的参数
报错:scanf_s函数报错:没有为格式字符串传递足够的参数这个问题很变态解决办法:在使用%c和%s读入字符或字符串时,应在地址参数后附加一个缓冲区边界值。int main() { char s1[20] = "i m name"; char *p1, *p2; char s3[10] = {0}; p1 = s1; p2 = s3; printf("请输入你的名字: \n"); //scanf_s("%s",&s3); scanf_s("%s",&.原创 2020-05-24 16:55:23 · 166866 阅读 · 16 评论 -
斐波那契数列的四种实现方式(C语言)
斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,像这样的:1、1、2、3、5、8、13、21、34、55......今天,我们用四种方式来进行实现:1.递归int Fibon1(int n){ if (n == 1 || n == 2){ return 1; }else{ return Fibon1(n - 1) + Fibon1(n - 2); }}int main(){ int n...原创 2020-05-10 21:33:53 · 145396 阅读 · 9 评论 -
数据结构之结构体malloc跨函数使用内存
#include <stdio.h>#include <string.h>#include <malloc.h>struct Student { int sid; int age;};struct Student * createStudent();void showStudent(struct Student *);int main() ...原创 2020-04-19 15:27:43 · 95661 阅读 · 0 评论 -
数据结构之malloc()函数动态内存分配复习
直接上代码分析#include <stdio.h>#include <string.h>#include <malloc.h>int mian() { int a[5] = { 1,5,8,46,12 }; int len; printf("请输入你要分配数组的长度: len="); scanf("%d", &len); ...原创 2020-04-19 14:09:11 · 115349 阅读 · 0 评论 -
C语言strcpy函数的使用
strcpy简单使用:#include <stdio.h>#include <string.h>struct Student { int sid; char name[20]; int age;} st; //此处分号不可省略int main(void) { struct Student st = {1000,"zhangsan",20};...原创 2020-04-19 11:00:53 · 149027 阅读 · 1 评论 -
数据结构之结构体复习
为什么出现结构体? 为了表示一些复杂的数据,一些基本数据类型无法满足要求,当要用一个变量描述一个对象的多个属性时,普通的内置数据类型是表示不了的,这个时候就可以用结构体回。结构体和类很相似,唯一不同的是:结构体默认是公有成员,而类默认是私有成员。什么叫结构体?C语言中的结构体在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data...原创 2020-04-19 10:07:23 · 112668 阅读 · 0 评论 -
数据结构之指针复习
废话不多说,拿起键盘就是干,直接上代码:#include <stdio.h>int main() { double *p; double x = 66.6; p = &x; //x占8个字节,一个字节占8位,一个字节一个地址 double arr[3] = { 1.1,2.2,3.3 }; double *q; q = &arr[0];...原创 2020-04-19 09:17:25 · 107992 阅读 · 0 评论 -
C4996 'fopen': This function or variable may be unsafe
C4996 'fopen': This function or variable may be unsafe.Consider using fopen_s instead. To disable deprecation,use _CRT_SECURE_NO_WARNINGS. See online help for details.在工程文件处右击,选择属性->配置属性-&...原创 2020-02-28 22:31:14 · 113468 阅读 · 0 评论 -
C语言构建一个链表以及操作链表
#include <stdio.h>#include <malloc.h>#include <stdlib.h>struct Node{ int data; struct Node * pNext;};struct Node * createList(void){ int len; //存放有效节点的个数 int i; i...原创 2019-12-21 11:25:27 · 121796 阅读 · 0 评论 -
指针的优势和缺点
在说为什么引入指针这个问题前先带大家了解一下什么是指针?指针最为简短的定义:指针即为内存的地址。 那什么是内存呢?举个栗子当我们计算 4*(46+4)时,我们人脑会想到先有个中间值 50 然后再计算成 200,计算机也会这样有一个 50 的中间值,我们人脑在计算的时候50 这个中间值保存在我们的万能的脑子中,计算机在出现最终答案前也会把这个中间值一个方便它进行下一步计算的地方,这地方就是内存...原创 2019-12-11 22:38:33 · 130404 阅读 · 0 评论 -
结构体变量和结构体指针变量作为函数参数传递问题
字符串赋值:strcpy_s(pstu->name, "张三");需要引入头文件:#include <string.h>#include <stdio.h>#include <string.h>struct Student { int age; char sex; char name[100];};void InputStud...原创 2019-12-10 22:52:52 · 104485 阅读 · 1 评论 -
【C语言笔记结构体】
我们都知道C语言中变量的类型决定了变量存储占用的空间。当我们要使用一个变量保存年龄时可以将其声明为int类型,当我们要使用一个变量保存某一科目的考试成绩时可以将其声明为float。那么,当我们要做一个学生信息管理系统时,需要保存学生的姓名、学号、年龄等信息,该怎么做呢?如当要保存三个学生的信息时,方法一是:char *name1,*name2,*name3; // 三个学生的姓...转载 2019-12-07 22:14:48 · 105700 阅读 · 0 评论 -
【C语言结构体】
pst->age = 88; //第二种方式 计算机内部会被转化成(*pst).age 没有什么为什么这就是->的含义#include <stdio.h>//推荐第一种struct Student{ int age; float score; char sex; };//不建议使用struct Student2 { ...原创 2019-12-07 22:05:19 · 109675 阅读 · 0 评论 -
静态变量不能跨函数使用
这个程序从语法上没有错误,但是从逻辑上讲是有问题的。因为调用function()函数已经执行完毕函数内存的静态变量已经释放,p就不能指向i 但是却把 i的内存变量值读取出来了,这是不可以的。静态变量不可以跨函数使用#include <stdio.h>void function(int ** q) { //q是个指针变量,无论q是什么类型指正变量,都只占4个字节...原创 2019-12-06 22:43:55 · 124376 阅读 · 1 评论 -
动态内存的分配用法和构造动态一维数组
int *pArr;pArr = (int *)malloc(4 * length);相当于构造了这样一个数组 intpArr[length];#include <stdio.h>#include <malloc.h>void function(int * q) { //*p = 200; //报错 因为没有变量*p //q = 2...原创 2019-12-04 22:08:21 · 123220 阅读 · 0 评论 -
内存的动态分配过程分析
#include <stdio.h>#include <malloc.h>int main() { int i = 5; //分配了4个字节,静态分配 int * p = (int *)malloc(4); /* * 1,使用malloc函数,必须添加<malloc.h>头文件 * 2,malloc函数只有一个形参,并且形参...原创 2019-12-04 15:57:47 · 117020 阅读 · 0 评论 -
C语言,为什么动态内存分配申请后,还要再释放?
比如main函数里有一句 malloc(),后面没有free()1.那么当main结束后,动态分配的内存不会随之释放么?2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑?1. 就算没有free(),main()结束后也是会自动释放malloc()的内存的,这里监控者是操作系统,设计严谨的操作系统会登记每一块给每一个应用程序分配的内存,这使得它能够在应用程序本身失控的情况...原创 2019-12-04 14:45:04 · 117606 阅读 · 0 评论 -
为什么需要动态内存分配?
传统数组的缺点:1,数组的长度必须实现预定,且是常整数,不能是变量,例如: inta[5]; //正确 int len=5; int a[len]; //error2,传统形式定义的数组,该数组内存程序员无法手动释放,在一个函数运行期间,系统为该函数中的数组所分配的空间会一直存在,直到该函数运行完毕,数组的空间才会被系统释放。3...原创 2019-12-04 12:39:13 · 115173 阅读 · 0 评论 -
一个指针变量到底占几个字节
int main() { char ch = 'A'; int i = 99; double x = 66.6; char *p = &ch; int *q = &i; double *r = &x; printf("%d %d %d", sizeof(p), sizeof(q), sizeof(r)); //4 4 4 whi...原创 2019-12-04 09:42:47 · 118489 阅读 · 2 评论 -
32位操作系统,为什么最大支持4G存储空间,2的32次方 = 4294967296bit = 4G,这个怎么计算出来的,
32位是说总线有32根,根据每根高低电平的不同可以有2的32次方次不同情况,也就可以确定2的32次方次不同的线路,到达2的32次方次个内存单元,每个内存单元是1B,也就是4GB...原创 2019-12-03 23:18:24 · 114994 阅读 · 0 评论 -
一维数组和指针的关系
数组名是一个指针常量,表示数组第一个元素的的起始地址。如 int a[5]; a表示数组第一个元素a[0]的起始地址&a[0]。一 引用数组元素的方法: ①用数组下标引用数组元素 数组a中元素用下标表示为: a[0]a[1]a[2]a[3]a[4] ②用指针引用数组元素 数组a中元素用下标表示为: int *p = a;...原创 2019-12-02 22:05:46 · 136492 阅读 · 0 评论 -
指针一维数组名的含义
&a[0]表示第一个元素变量的地址值a表示数组第一个元素的地址#include <stdio.h>int main() { int a[5]; //a是数组名 //int b[3][4]; int b[5]; //a = b; 报错error a是常量// printf("%lf\n", &a[0]); printf(...原创 2019-11-30 21:19:35 · 128732 阅读 · 0 评论 -
c语言中*的三种含义
1.乘法 3*52.定义指针变量 int * p;//定义了一个名字叫p的变量,能够存放int数据类型的地址3.指针运算符,//如果p是一个已经定义好的指针变量则*p表示以p的内容为地址的变量第三种含义不是那么好理解:我是琢磨了好久下面这个列子解释比较合理a的地址假设是1000,值(内容)是5,p的地址假设是2000,值(内容)a的地址,也就是一千,*p也就取p的内容1...原创 2019-11-30 14:59:15 · 144466 阅读 · 0 评论 -
c语言中int *a,int a和int* a什么区别?
int *a指的是定义一个指向int类型数据的指针a,int a指的是定义一个整数变量a,int* a跟int *a是一样的,只是int *a更严谨,比如,int *a,b; 只有a是指针变量int* a,b; 容易让人觉得a和b都是指针#include <stdio.h>void huhuan(int a,int b) { printf("%d\n", a...原创 2019-11-30 13:04:18 · 133672 阅读 · 1 评论 -
printf函数讲解
printf函数讲解#include <stdio.h>/*辗转相除法求最大公约数*/int gcd(int m, int n);int factrial(int a);int main(void){ int m, n, t; scanf_s("%d %d", &m, &n); if (m < n){ t = m; m = n;...原创 2019-11-23 14:00:54 · 101431 阅读 · 0 评论 -
C语言递归算法(二)
1.汉诺塔问题#include <stdio.h>int count;void hanoi(int n,char a,char b,char c);int main(void){ int n; char a='A',b='B',c='C'; printf("请输入汉诺塔层数\n"); scanf("%d",&n); hanoi...原创 2019-11-21 22:31:13 · 120946 阅读 · 0 评论 -
C语言递归算法(一)
1.辗转相除法求最大公约数#include <stdio.h>/*辗转相除法求最大公约数*/int gcd(int m, int n);int main(void){ int m, n, t; scanf_s("%d %d", &m, &n); if (m < n){ t = m; m = n; n = t; } n = gcd(...原创 2019-11-21 22:26:41 · 136317 阅读 · 0 评论 -
求出1到某个数的所有素数
判断输入某个数,求出1到某个数的所有素数#include <stdio.h>bool isPrime(int i) { int m; for (m = 2; m<i; m++) { if (0 == i % m) { break; } } if (i == m) { return true; } else { return fa...原创 2019-11-20 22:52:51 · 104289 阅读 · 0 评论 -
include.cpp(main函数的cpp文件)文件中包含另一个.cpp文件的错误及原因
当一个main函数的cpp文件包含另一个cpp文件,使用#include "data.cpp" 是不可以的,例如下面include.cpp#include <stdio.h>#include "data.cpp"//extern void add();void main() { #include "include.h" #include "yingcheng.i...原创 2019-11-17 11:23:12 · 113987 阅读 · 0 评论 -
c语言引入文件和java导包的区别
编译过程: 预处理--编译--汇编--链接 预处理:用于将所有#include头文件及#define等宏定义替换成真正的内容,预处理后的得到的仍然是文本文件,但体积会大。 1.将头文件中的内容(源文件之外的文件)插入到源文件中 2.进行了宏替换的过程,定义和替换了由#define指令定义的符号 3.删除注...原创 2019-11-16 22:51:22 · 129970 阅读 · 0 评论 -
switch用法和原理
switch用法 int val; printf("请输入你要到的楼层:\n"); scanf_s("%d", &val); switch (val){ case 1: printf("1层开!\n"); break; case 2: printf("2层开!\n"); break; case 3: printf("3层开!\n"); break;...原创 2019-11-14 22:02:11 · 111845 阅读 · 0 评论 -
C语言一元二次方程
没有使用do while实现一元二次方程/*一元二次方程*/ double a, b, c; double delta; double x1, x2; printf("请输入一元二次方程的三个系数:\n"); printf("a="); scanf_s("%lf", &a); printf("b="); scanf_s("%lf", &b); printf(...原创 2019-11-12 23:32:54 · 125695 阅读 · 1 评论 -
判断回文数和求斐波拉序列
判断输入的数字是不是一个回文数# include <stdio.h>int main(void) { int val; int m; int sum = 0; printf("请输入数字:\n"); scanf_s("%d", &val); m = val; while (m) { sum ...原创 2019-11-12 22:46:03 · 110705 阅读 · 0 评论 -
C语言中unsigned和signed在声明时有什么作用
1、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。2、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上...原创 2019-11-09 12:17:32 · 141688 阅读 · 0 评论 -
C语言system函数使用
函数原型包含在头文件 “stdlib.h” 中int system(const char * command)函数功能执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。说明:在windows系统中,system函数直接在控制台调用一个command命令。在L...原创 2019-11-08 19:13:29 · 155775 阅读 · 16 评论 -
编译器和链接器的任务是什么
编译器:把源代码编译成目标文件链接器:把目标文件和库文件链接成可执行文件原创 2019-11-08 16:53:54 · 117565 阅读 · 1 评论 -
编程的7个主要步骤:
1. 定义程序目标2. 设计程序3.编写程序4. 编译程序5.运行程序6. 测试与调试程序7. 维护与修改程序记着,别忘。原创 2019-11-08 16:50:28 · 137510 阅读 · 2 评论 -
就编程而言,可移植性意味着什么?
要想了解可移植性必须要知道:1.什么是程序?2.什么是系统平台?什么是程序首先,我们得知道程序的本质是什么?程序的本质就是一连串能被CPU识别并执行的有0、1代码组成的指令即目标代码(0、1组成的代码)。不同类型的CPU指令集是不同的,相同的一段0、1代码intelCPU能识别,ARM CPU就不能识别产生错误。其次,我们得知道程序的运行原理是什么?大家都知道程...原创 2019-11-08 16:45:52 · 130698 阅读 · 0 评论 -
C语言回文数的判断
# include <stdio.h># include <math.h>int getLength(long int num){ /*定义函数计算num的位数*/ int found , length ; found =0; length =10; if(num==0){ return 1; } while(found==0){ if(num/...原创 2019-11-08 12:24:55 · 121351 阅读 · 0 评论 -
C语言关键字以及-格式输入输出中“%d,%o,%x,%e,%f”等的含义
32个关键字:数据类型13个:void signed unsigned short long int float double char enum struct union typedef (_Bool _Imaginary _Complex) 类型限定、修饰2个:const volatile (restrict inline) 变量的存储类别4个:auto static...原创 2019-10-26 18:36:21 · 128338 阅读 · 1 评论