编程基础
哈哈哈呀啦啦啦
这个作者很懒,什么都没留下…
展开
-
【C语言】----预处理宏
宏是学习任何语言所不可缺少的,优秀的宏定义可以使得代码变得很简洁且高效,有效地提高编程效率。宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串,解释器或编译器在遇到宏时会自动进行这一模式替换C语言有简单的宏系统,由编译器或汇编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜索和替换,C语言的宏非常简单,我们只需要做好宏定义,其余交给编译器预处理即可C语言的宏(预处理功...原创 2019-11-16 00:39:21 · 351 阅读 · 0 评论 -
用C语言实现一个通讯录
要求: 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人 思路: TDD(测试驱动开发)思想,模块化编程!代码实现头文件Cont...原创 2019-11-15 23:48:20 · 188 阅读 · 0 评论 -
C语言struct用法详解
数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{ ...原创 2019-11-15 23:39:23 · 1054 阅读 · 0 评论 -
为什么一个指针在32位系统中占4个字节,在64位系统中占8个字节?
一个指针在64位的计算机上,占8个字节;一个指针在32位的计算机上,占4个字节。原因如下:我们都知道cpu是无法直接在硬盘上读取数据的,而是通过内存读取。cpu通过地址总线、数据总线、控制总线三条线对内存中的数据进行传输和操作。 具体流程: 1、cpu通过地址总线,找到该条数据; 2、通过控制总线得知该操作是读操作还是写操作; 3、通过数据总线将该数据读取到cpu或...原创 2019-11-15 23:08:33 · 3131 阅读 · 0 评论 -
1.模拟实现strncpy 2.模拟实现strncat 3.模拟实现strncmp
strncpy的主要功能是将数组A中的一个字符串覆盖到另一个数组B,不管数组B中是什么内容都将被A中内容覆盖掉。#include<stdio.h>#include<assert.h>void My_strncpy(char* dest, const char* src, int se){ assert(dest); assert(src); char* s...原创 2019-11-13 13:46:35 · 78 阅读 · 0 评论 -
使用“#ifndef/#define/#endif”防止头文件被重复引用
在 C 语言中,条件编译指令可以实现源代码的部分编译功能,可以根据表达式的值或者某个特定的宏来确定编译条件,以决定编译哪些代码,不编译哪些。使用“#ifndef/#define/#endif”防止头文件被重复引用在 C 语言中,一个文件中可以包含多个头文件,而头文件之间又是可以相互引用的,这将引起一个文件中可能间接多次包含某个头文件,从而导致了某些头文件被重复引用多次。例如,...原创 2019-11-02 17:50:04 · 2455 阅读 · 1 评论 -
C/C++中extern关键字详解
...原创 2019-11-02 10:43:14 · 267 阅读 · 0 评论 -
计算机cpu、寄存器、内存区别
1、寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。2、内存既专业名上的内存储器,内存是由内存芯片、电路板、金手指等部分组成的。它包涵的范围也很大,一般分为只读存储器和随即存储器,以及最...原创 2019-11-02 10:05:53 · 854 阅读 · 0 评论 -
模仿qsort的功能实现一个通用的冒泡排序
#include<stdio.h>//模仿qsort的功能实现一个通用的冒泡排序。#include<stdlib.h>int cmp(const void *m, const void *n){ return *(char *)m - *(char *)n;}void swap(char *p1, char *p2, int width){ int i = ...原创 2019-10-31 21:38:56 · 130 阅读 · 0 评论 -
使用qsort函数排序各种类型的数据
...原创 2019-10-31 20:32:56 · 293 阅读 · 1 评论 -
1.实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-31 18:57:44 · 97 阅读 · 0 评论 -
数组到底在什么时候会转换为指针
数组名的本意是表示一组数据的集合,它和普通变量一样,都用来指代一块内存,但在使用过程中,数组名有时候会转换为指向数据集合的指针(地址),而不是表示数据集合本身,这在前面的例子中已经被多次证实。数据集合包含了多份数据,直接使用一个集合没有明确的含义,将数组名转换为指向数组的指针后,可以很容易地访问其中的任何一份数据,使用时的语义更加明确。C语言标准规定,当数组名作为数组定义的标识符(也就是定...原创 2019-10-26 00:08:06 · 5446 阅读 · 3 评论 -
数组和指针绝不等价,数组是另外一种类型
数组和指针不等价的一个典型案例就是求数组的长度,这个时候只能使用数组名,不能使用数组指针,前面我们已经强调过了,这里不妨再来演示一下:复制纯文本复制#include <stdio.h> int main(){ int a[6] = {0, 1, 2, 3, 4, 5}; int *p = a; int len_a = sizeof(a) / sizeo...原创 2019-10-26 00:05:51 · 3403 阅读 · 3 评论 -
c---喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水
...原创 2019-10-25 16:54:41 · 179 阅读 · 0 评论 -
C语言之内存四区模型和函数调用模型
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-24 21:02:55 · 172 阅读 · 0 评论 -
C/C++题目--strcpy函数
...原创 2019-10-24 20:37:27 · 184 阅读 · 0 评论 -
strcpy和strncpy函数的安全性分析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...原创 2019-10-24 20:10:10 · 1293 阅读 · 0 评论 -
scanf安全性分析
int scanf(char*,…)是其函数声明。其中只要求第一个参数是char*,即字符串即可,而对于其他参数则没有限制类型和个数,这其中有安全风险。举个例子:scanf(“%d %c”,&i,&ch);如果从键盘上输入的数据是:30 A?则变量ch的值是空格字符而不是字符‘A’。这种错误很隐蔽,因此建议读者尽量不要使用scanf函数从键盘上输入包含字符数据在内的一组不同类型的...原创 2019-10-24 20:06:57 · 604 阅读 · 0 评论 -
数组小结(数组相关运算 )
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...原创 2019-10-23 12:53:59 · 85 阅读 · 0 评论 -
深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了...原创 2019-10-23 11:19:21 · 106 阅读 · 0 评论 -
c语言内存相关
动态内存分配这里说一下为什么要使用动态内存分配,C语言中一切操作都是基于内存的,变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定,所以定义数组的时候必须指定数组长度,儿数组长度是再编译器就必须决定了,但是,程序运行过程中,可能需要使用一些额外空间。所以就需要动态内存分配的支持,以下2个函数是与动态内存分配有关:malloc和freemalloc所分配的是一块连续的内存,以字节为单位...原创 2019-10-21 23:42:26 · 122 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...原创 2019-10-21 22:00:09 · 150 阅读 · 0 评论 -
c语言和内存
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css"> <link rel="...转载 2019-10-19 22:38:47 · 124 阅读 · 0 评论 -
指针和数组
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-14 17:43:13 · 100 阅读 · 0 评论 -
猜数字游戏。c语言
游戏内容:玩家输入一个数字,程序生成一个随机数,比较其和随机数的大小。若相等,则提示玩家猜对了;不相等,则提示玩家猜大了还是猜小了,直到玩家猜对。注意:生成随机数需要调用rand函数。rand 函数:生成随机数返回在0和RANDMAX之间的伪随机整数。这个数字是由一个算法生成的,该算法在每次调用时返回一系列明显不相关的数字。该算法使用一个种子来生成序列,该序列应该使用函数srand初始化为一...原创 2019-04-28 16:07:56 · 189 阅读 · 0 评论 -
数组作为函数参数传递
数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自void printvalues(int a[],int size);//由于编译器会忽略第一维数组的长度,所以将其长度作为第二个形参动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。一、一维数组1.三种定义形式:void printvalues(int *);...原创 2019-05-29 15:08:51 · 1624 阅读 · 0 评论 -
数组总结
一.一维数组1.数组的创建及初始化(1)数组创建时,[]中要给一个常量,不能用变量例:int main(){int a[10];char b[4];double d[6];}(2)数组在创建时时未指定数组的确定大小时,就得初始化。此时数组的元素个数根据初始化的内容来确定例:char a[] = {'a','b','c'}2.一维数组的使用(1)数组下标从0开始;(2)数...原创 2019-05-17 19:29:46 · 75 阅读 · 0 评论 -
用C语言实现一个能够连续展开的扫雷。
防止第一次被炸死;标记雷;连续展开。·代码实现以及解释一、主函数的实现以及扫雷的构思框架(test.c)int main(){ int input=0; do { menu(); printf("请选择\n"); scanf("%d",&input); switch(input) { case 1: printf("请开始游戏\n"); g...原创 2019-05-24 17:23:27 · 211 阅读 · 0 评论 -
C语言操作符详解
**C语言操作符 分类:算数操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用,函数调用和结构成员**算数操作符+ - * / %1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数.2.对于 / 操作符如果两个操作符都为整数,执...原创 2019-05-24 16:00:35 · 130 阅读 · 0 评论 -
const及static 剖析
const总结1.常对象:const 类名 对象名[()]例如const Cdate d1(2008,8,8)d1就是常对象,对象d1中的所有成员的值都不能被修改,定义常对象必须要有初值,不能做左值,如果定义了常对象,则不能调用该对象的非const成员函数,只能访问const成员函数,如果希望成员函数访问常对象,只需要将该成员函数声明为const即可,比如:void print() co...原创 2019-05-15 16:55:01 · 114 阅读 · 0 评论 -
c语言实现三子棋
在实现三子棋游戏中,采用多文件格式书写程序,首先在main.c文件中创建显示菜单,将程序实现放在chess.c文件中,为了规范,在chess.h中声明所调用的函数及头文件chess.h 文件主要功能①将头文件声明和函数声明打包在一起,其他文件直接调用这一个即可#ifndef _CHESS_H_#define _CHESS_H_#include <stdio.h>#inc...原创 2019-05-20 19:48:37 · 141 阅读 · 0 评论 -
C语言之一个有趣的关机程序
#include<stdio.h> int main(){char input[]={0};system("shutdown -s -t 60")//这是Windows系统下的一个关机命令flag:printf("你的电脑将在一分钟后关机,如果输入"我是猪",就会取消关机!\n请输入:");scanf("%s",input);if(0==strcmp(input,"...原创 2019-05-20 19:11:22 · 244 阅读 · 0 评论 -
宏和函数的区别
1.#define定义宏①宏的定义方式#define name(参数列表) stuff 在预处理阶段把参数替换到文本当中例如:#define MAX 100注意:参数列表和宏名中间不能加空格②宏在运算中的一些陷阱//下面这段代码输出的结果什么呢? #include<stdio.h> #define DOUBLE(x) x+x int main(...原创 2019-05-20 18:56:29 · 1344 阅读 · 0 评论 -
函数的调用过程,栈帧的创建和销毁
在c程序中当计算机遇到某一个函数时,它就会跳转过去执行这个函数,执行完毕后接着再去执行下一条函数(指令)。在执行调用函数的过程中,计算机通常还要根据函数完成一些工作,比如数据的传递(形参拷贝、返回值)、内存的分配和释放、执行控制的转移,这些操作通过形成一个栈帧来完成。一.什么是栈帧?引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现函数调用过程的一种数据结构。” 实际上,可以简单...原创 2019-05-12 23:48:21 · 431 阅读 · 0 评论 -
strcpy函数实现
要求:不使用c++/c的字符串库函数,实现strcpy函数最易想到的方法:void my_strcpy(char *dest, char *src){ while (*src != '\0') { *dest++ = *src++; } *dest = *src; //将'\0'拷贝过去}由此可见此代码还可进行简单优化:...原创 2019-07-25 22:05:01 · 199 阅读 · 0 评论 -
C语言中 unsigned char 与 signed char 不同输出格式一些认识
首先考虑下面代码输出什么?#include <stdio.h> int main(void){ signed char a = -1; unsigned char b = -1; printf("%%d:\n"); printf("%d\n", a); printf("%d\n", b); printf("\n%%u:\n");...原创 2019-09-27 23:06:53 · 2823 阅读 · 1 评论 -
C语言指针与二维数组
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例:int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };从概念上理解,a 的分布像一个矩阵:0 1 2 34 5 6 78 9 10 11但在内存中,a 的分布是一...原创 2019-09-04 23:22:45 · 4305 阅读 · 1 评论 -
C语言指针数组(每个元素都是指针)
如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为:dataType *arrayName[length];[ ]的优先级高于*,该定义形式应该理解为:dataType *(arrayName[length]);括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *。除了每个元素的数...原创 2019-09-03 22:45:53 · 1478 阅读 · 0 评论 -
C语言指针
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用4个字节,char 占用1个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。下图是 4G 内存中每个字节的编号(以十六进制表示):我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 ...原创 2019-09-03 22:40:13 · 101 阅读 · 0 评论 -
二级指针(指向指针的指针)
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:将这种关系转换为C语言代码:int ...原创 2019-09-03 22:43:51 · 888 阅读 · 0 评论