C语言
Cassie~
hello world!
展开
-
C 和 C++的区别 / struct 和 class 的区别 / 指针和引用的区别 / new 与 malloc 的区别 / 堆和栈的区别 / sizeof 和 strlen 的区别
C++ 的内存管理机制C++ 内存分配方式,五个区:堆区、栈区、自由存储区、全局/静态存储区、常量存储区。不能访问未申请、未初始化的内存、申请失败的内存或者已经释放的内存free 和 delete 后要将指针置空,防止野指针的出现不要忘记释放内存,否则会导致内存泄露不能越界访问内存32 位、64 位系统下各数据类型所占用的内存空间64 位系统下除了指针类型和 long long ...原创 2020-09-05 09:17:51 · 1418 阅读 · 0 评论 -
Linux 的 TCP 编程
TCP是TCP/IP协议族中面向连接的可靠协议,本文将介绍其工作流程以及在Linux中对其进行编程的方法。TCP基础同其他任何协议栈一样, TCP向相邻的高层提供服务。因为TCP的上一层就是应用层,因此,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。应用程序通过编程调用 TCP 并使用TCP服务,提供需要准备发送的数据,用来区分接收数据应用的目的地址和端口号。通常情况下, ...原创 2019-12-09 12:22:40 · 633 阅读 · 0 评论 -
Linux C 网络_建立连接函数
当使用 socket 函数建立一个套接字并且绑定了地址之后,即可使用connect函数来和服务器建立一个连接。#include <sys/types.h>#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);其中参数 sockfd ...原创 2019-11-18 21:50:26 · 469 阅读 · 0 评论 -
Linux C 网络_绑定套接字函数
在创立了套接字之后需要将本地地址和套接字绑定在一起,此时可以调用 bind 函数。#include <sys/types.h>#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数 sockfd 是使用 socket 函数创建的套接...原创 2019-11-18 20:36:46 · 708 阅读 · 0 评论 -
Linux C 网络_创建套接字描述符函数
Linux 使用 socket 函数来创建一个套接字描述符。#include <sys/types.h>#include <sys/socket.h>int socket(int domain, int type, int protocol);如果函数调用成功,则返回套接字的描述符,是一个正整数,如果函数调用失败则返回 -1。对函数中的各个参数描述如下:**...原创 2019-11-18 20:08:32 · 485 阅读 · 0 评论 -
Linux C 网络_域名转换函数族
在实际的网络应用中,常常会使用类似 “www sina. com.cn" 这样的域名替代 IP 地址来标识一个服务器,所以需要函数将域名和实际的 IP 地址进行转换。Linux 在 netdb.h 头文件中定义了一个结构体,用于描述一个主机的相关参数,其形式如下:struct hostent{ char *h_name;//主机的正式名称 char *h_aliases;//...原创 2019-11-13 21:01:28 · 210 阅读 · 0 评论 -
Linux C 网络_IP地址转换函数族
通常 IP 地址会被表示为 “192.168.1.1” 这样的 “点分十进制” 方式,而在 Linux 的网络编程中会使用32位二进制值,所以 Limux 提供了函数族用于将这两个数值进行转换,这些函数包括 inet_aton、inet_ntoa 和 inet_addr 等。IP 地址转换函数族inet_aton 函数用于将点分十进制数的 IP 地址转换成为网络字节序的 32 位二进制数值。...原创 2019-11-13 20:31:10 · 1081 阅读 · 0 评论 -
Linux C 网络_字节操作函数族
套接字地址为多字节数据而不是以空字符结尾,所以 Linux 提供了两组函数来处理这个多字节数据。1. 第一组函数第一组函数是和 BSD 系统兼容的函数,包括了 bzero、beopy 和 bcmp。函数 bzero 将参数 s 指定的内存的前 n 个字节设置为 0,通常用它来将套接字地址清零。#include <strings.h>void bzero(void *s, ...原创 2019-11-12 22:40:03 · 165 阅读 · 0 评论 -
Linux 的端口和套接字
Linux 的端口是一个逻辑概念,其由 TCP/IP 协议定义,是一个 0–65535 之间的数字,可以分为常用的“固定”端口和通用端口两个部分。“固定”端口是指一些常用的软件或者 TCP/IP 协议中确定和公布的,通常来说不会被其他程序使用。Linux 中的常见“固定”端口和对应的协议协议端口号FTP21TELNET23TFTP69SNMP16...原创 2019-11-06 17:40:57 · 595 阅读 · 0 评论 -
Linux 套接字的结构定义
Linux 在头文件 sys/socket.h 中定义了一种通用的套接字结构类型,以供不同的协议进行调用,对其说明如下:struct sockaddr{ unsigned short int sa_family;//套接字协议地址类型 unsigned char sa_data[14];//14字节的协议地址,包括IP地址和端口};sa family:套接字的协议族地...原创 2019-11-06 17:00:03 · 420 阅读 · 1 评论 -
Linux 进程的基础属性
Linux系统上所有运行的任务都可以是一个进程,每个用户任务、每个系统管理,都可以称之为进程,Linux用分时管理的方法使所有的任务共同分享系统资源。进程的定义:在自身的虚拟地址空间运行的一个单独程序。进程是动态的,程序是静态的,进程由程序产生,但不是程序。进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序,一个程序可以启动多个进程。1. 进程的四要素要有一段程序代码以供该程序...原创 2019-11-05 09:28:58 · 563 阅读 · 0 评论 -
Linux 的进程标识方法
1. 进程描述符2. 进程标识符3. Linux进程的用户4. 进程标识的获取实例原创 2019-11-01 21:18:26 · 2200 阅读 · 0 评论 -
Linux 退出进程和销毁进程
退出进程当一个进程执行结束后必须要退出,退出时内核会进行一系列的相应操作。在 Linux 中,共有 8 种进程的退出方法,其中包括 5 种正常的方法和 3 种异常的方法。通常来说 Linux 的应用代码会调用 exit 系列函数来退出一个进程,对其标准调用格式说明如下:#include<stdlib.h>#include<unist.h>void exit(int...原创 2019-10-25 08:43:28 · 1494 阅读 · 0 评论 -
Linux 的进程操作(执行进程)
如果需要在子进程中执行一些自定义的动作,则需要调用 exec 函数族。当进程调用 exec 系列函数的时候,该进程执行的程序被立即替换为新的程序,而新程序则从 main 函数开始执行,并立刻替换掉了当前进程的正文段、数据段、堆和堆栈,需要注意的是其进程标识符和进程描述符是不会改变的。1. exec函数族基础exec函数族提供了一一个在进程中启动另一个程序执行的方法,其可以根据指定的文件名或目...原创 2019-10-23 17:55:06 · 652 阅读 · 0 评论 -
Linux_线程操作(线程控制)
线程的操作包括线程的创建,退出和终止,阻碍和分离,取消和清理等。1. 创建线程在Linux中,可以调用 pthread_create 函数创建一个新的线程,对其标准调用格式说明如下:#include <pthread.h>int pthread_create(pthread_t *thread,pthread_attr_t *attr,void*(*start_routine)...原创 2019-09-07 10:19:21 · 257 阅读 · 0 评论 -
C语言_简易通讯录
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#define SIZE 1000typedef struct PersonIFM{ char name[100]; char phone[100];}PersonIFM;t...原创 2019-02-09 10:47:04 · 248 阅读 · 0 评论 -
C数据结构_顺序表
1.定义动态顺序表typedef struct SeqList{ int *array; //指向动态开辟的数组 int size; //有效数据个数 int capacity; //容量空间大小}SeqList;2.顺序表基础功能实现//初始化void Init(SeqList *p, int capacity){ assert(p); p->...原创 2019-01-30 10:54:22 · 144 阅读 · 0 评论 -
C语言_简易扫雷小游戏
相信不少人都玩过一款益智小游戏——扫雷,接下来就介绍一下用C语言编写的扫雷小游戏。一、通过编写函数实现不同的功能思路如下:1.定义所需要的变量将地图的行和列以及地雷的个数设置为宏定义,在今后想要增加难度时方便更改。定义两个二维数组表示地图,一个表示实际含雷的地图,一个表示用户看到的地图。2.编写菜单函数用户输入1表示开始游戏,输入0表示退出游戏,此时程序运行结束。...原创 2018-10-31 08:36:08 · 557 阅读 · 0 评论 -
C语言_杨氏矩阵
杨氏矩阵,是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的。在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)。例如数组:1 2 32 3 43 4 51 3 42 4 54 5 61 2 34 5 67 8 9接下来...原创 2018-11-03 10:38:18 · 347 阅读 · 0 评论 -
C语言_不使用(a+b)/2这种方式,求两个数的平均值。
不使用(a+b)/2这种方式,求两个数的平均值。使用位运算符,加深对不同位运算符功能的理解。代码如下:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int average1(int m,int n){ return (m + n) >> 1;}...原创 2018-11-03 10:56:43 · 3095 阅读 · 1 评论 -
C语言_简易三子棋小游戏
三子棋和五子棋的玩法相同,率先三子连成直线的玩家即可获胜。下面简单介绍用C语言编写的三子棋小游戏。思路如下:1.定义一个二维数组做为棋盘,定义数组的行和列。2.将棋盘初始化,填充为空格。3.打印棋盘函数,每次下子后都打印一次棋盘。4.玩家下子函数。提示玩家下子,对玩家的输入做判断,若输入不合法则再次输入,若输入合法则将玩家输入的位置进行填充布棋。5.电脑下子函数。...原创 2018-11-03 18:34:10 · 279 阅读 · 0 评论 -
C语言_杨辉三角
杨辉三角,是二项式系数在三角形中的一种几何排列。一、排列规律:前提:每行端点与结尾的数为1. 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。 第n行数字和为2n-1。 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 第n行的第m个数和第n-m+1个...原创 2018-11-04 09:13:27 · 2315 阅读 · 0 评论 -
C语言_有趣的逻辑推理问题
一、比赛名次1.题目5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半。写一个C语言程序确定比赛的名次。2.代码如下:#include <stdio.h>#include <std...原创 2018-11-04 09:21:32 · 2554 阅读 · 0 评论 -
C语言_位运算符的应用(1)
1.返回参数二进制中 1 的个数。比如:150000 11114 个 1代码如下://返回参数二进制中1的个数#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int count_one_bits(int value){ int count = ...原创 2018-11-04 09:46:45 · 1003 阅读 · 0 评论 -
C语言_位运算符的应用(2)
1.编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值value的二进制位模式从左到右翻转后的值。如:在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000程序结果...原创 2018-11-04 16:16:25 · 328 阅读 · 0 评论 -
C语言_字符串的旋转
1.实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB代码如下://左旋k字符#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>void ZuoXuan(cha...原创 2018-11-10 10:44:33 · 626 阅读 · 0 评论 -
C语言_函数递归举例
1.递归和非递归分别实现求第n个斐波那契数。//求第 n 个斐波那契数#include <stdio.h>#include <stdlib.h>int Fib1(int n){ if (n == 1 || n == 2) { return 1; } return Fib1(n - 1) + Fib1(n - 2);}int Fib2(int...原创 2018-11-05 15:25:45 · 9125 阅读 · 0 评论 -
C语言_喝汽水问题
喝汽水1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水?#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int main(){ int money = 0; int tolal = 0; int empty = 0; printf("请输入钱数:...原创 2018-11-11 19:41:48 · 348 阅读 · 0 评论 -
C语言_实现库函数strcpy ,strcat ,strstr ,strcmp ,memcpy ,memmove
//1.实现strcpychar* Mystrcpy(char *dest, const char *sour){ assert(dest != NULL); //assert(dest); assert(sour != NULL); //assert(sour); char *temp = dest; while (*sour != '\0') { *dest =...原创 2018-11-24 19:47:20 · 175 阅读 · 0 评论 -
C数据结构_链表
1.定义链表//无头单向非循环链表typedef struct SListNode{ int data; struct SListNode*next;}SListNode;typedef struct SList{ SListNode*head;}SList;2.链表基础功能的实现//初始化void Init(SList*p);//销毁void Dest...原创 2019-01-27 14:41:00 · 600 阅读 · 0 评论 -
C数据结构_链表练习题
1.删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3//力扣/* * Definition for singly-linked list. * struc...原创 2019-01-27 15:15:39 · 885 阅读 · 0 评论