C/C++
永远的烟火
我就是我,为绚丽绽放而厚积薄发的人间烟火
展开
-
空指针和野指针
空指针:指针变量置空,初始化为NULL,使它不指向任何内容;野指针:指针变量表不为空,地址值为随机值,可能指向任何地方;未初始化的指针:若指针未被初始化,所以指针所指向的也是随机的,他是个野指针,如果你引用指针,并修改这个指针所指向的内容,而如果这个指针所指向的内容恰好是另外一个程序的数据的话,你将其进行修改了,就会导致另外一个程序可能不能正常运行了.所以使用前一定要进行初始化;地址回收后的指针:free之后,指针地址被回收,相当于未初始化的指针,此时应该再次置空;空指针:指针变量置空,.原创 2020-11-23 09:51:58 · 900 阅读 · 1 评论 -
C判断字符串为空
#define MAX_LEN 32char ch[MAX_LEN]={0};(1)判断首字符是否为空字符if(ch[0] != '\0'){}(2)长度是否为0if(strlen(ch)!=0){}(3)判断字符串是否为空if(!strcmp(ch,"\0")){}原创 2020-06-12 14:12:46 · 5396 阅读 · 1 评论 -
i++和++i的联系和区别
1、单独的++i和i++等效int i = 0;while (i < 10) {i ++;}int i = 0;while (i < 10) {++ i;}经过运算后,i的值都是10。在while和for循环中的 ++i 和 i++ 是没有区别的。2、区别在赋值运算中int i,x;i = 1;x = 1;x = i ++; //先让x变成i的值1,再让i加1print("%d", x); //x=1print("%d", i);原创 2020-05-19 10:55:26 · 504 阅读 · 0 评论 -
字符串操作函数
char * strcat (char *restrict to, const char *restrict from)int strcmp (const char *, const char *);char * strcpy (char *restrict to, const char *restrict from)size_t strlen (const char *);ch...原创 2020-03-18 20:31:17 · 152 阅读 · 0 评论 -
内存操作函数
#include <stdlib.h>void * memchr (const void *block, int c, size_t size);int memcmp (const void *a1, const void *a2, size_t size);void * memcpy (void *restrict to, const void *restrict f...原创 2020-03-18 20:21:01 · 124 阅读 · 0 评论 -
【GCC】结构体指定位数
typedef struct{ AUTH_PAE_STATE apsm : 4; BAUTH_SM_STATE basm : 3; AUTH_KEYSM kxsm : 1; KRC_SM krcsm : 1; REAUTH_SM_STATE resm : 1; CTRL_SM_STATE cdsm : 1; PORT_MOD...原创 2020-02-29 17:41:00 · 356 阅读 · 0 评论 -
【GCC】函数宏
#define SET_DOT1X_txWhen(x,y) Access_Control_Timer_Kill(DOT1X_txWhen_TIMER,x);\ Access_Control_Timer_Set(DOT1X_txWhen_TIMER,x,y);\ ...原创 2020-02-29 17:37:34 · 252 阅读 · 0 评论 -
主机序和网络序
1、主机字节序整数在内存中保存的顺序。不同的CPU有不同的字节序类型,最常见的有两种:1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址 2、网络字节顺序TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用Big Endian排...原创 2020-02-29 17:31:38 · 291 阅读 · 0 评论 -
strcpy、strncpy和memcpy的区别
strcpy、strncpy和memcpy的区别原创 2020-02-20 15:04:12 · 238 阅读 · 0 评论 -
GNU C和 ANSI C的差别
参考如下:GNU C 与 ANSI C 的一些差别原创 2020-02-19 17:06:15 · 149 阅读 · 0 评论 -
输出控制符
输出控制符:%d int%ld long%md m 为指定的输出字段的宽度。%u unsigned%c char%f 浮点型%.mf 输出实数时小数点后保留 m 位%s 字符串%o 以八进制形式输出整数%x 以十六进制形式输出整数%p 输出内存地址...原创 2020-02-19 10:35:42 · 213 阅读 · 0 评论 -
指针的初始化与赋值
1、基本类型与指针(1)指针本身初始化int a = 25;int *ptr = &a; (2)指针指向的内存初始化int *p = 7;指针本身初始化是前提,否则就是空指针,即该指针不知指向哪一块内存,所以要给指针赋值:int k;*p = &k;printf("k: %d\n", k); // k=72、字符串与指针将指针指向字符串常量的首地址;不...原创 2020-01-31 14:45:35 · 1423 阅读 · 0 评论 -
字符串定义
一、字符数组#define MAX 100#define MSG "How are you"void test_char_array(){ /** * 初始化指定大小数组存储字符串 * * 指定数组大小时,至少比字符串长度多1,为的是容纳空字符; * 字符数组中未被使用的元素自动初始化为空字符'\0'; */ const char str[MAX] = MSG;...原创 2020-01-29 16:37:54 · 607 阅读 · 0 评论 -
静态内存、动态内存与堆栈
一、何谓静态内存、动态内存静态内存分配好后,程序运行过程中一直存在不会被释放,且一旦分配好,其内存大小就固定下来不能改变,在编译和链接的阶段就会分配好。动态内存是程序运行过程中,根据程序的需要分配和释放,其大小可变。二、堆与栈堆和栈都是动态分配的,区别有两点:1、栈是由编译器分配与释放,堆是程序通过调用malloc或new分配,调用free或delete释放。2、栈是线性结构,堆是链表...原创 2020-01-29 11:13:58 · 508 阅读 · 0 评论 -
C语言基本数据类型
/* WORD一般是无符号类型 */typedef unsigned short WORD16;typedef signed short SWORD16;typedef unsigned int WORD32;typedef signed int SWORD32;typedef unsigned long long WORD6...原创 2020-01-21 16:59:21 · 1422 阅读 · 0 评论 -
const用法
#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;void show_array(const double ar[], int n);void mult_array_one(double ar[], int n);void mult_array_two(const double ar[], int n);int main(int arg...原创 2018-07-19 19:49:20 · 206 阅读 · 0 评论 -
字符串输入与输出
void test_string(){ /* 1、声明字符串 数组word是常量; 指针wd是变量; 所以,只有指针能进行递增操作!!! */ char word[] = "We are here today!"; char *wd = "Where are you now?"; int i = 0; ...原创 2018-08-04 16:56:29 · 549 阅读 · 0 评论 -
动态分配内存malloc/free
#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;;#define Max 10int g_Count = 10; // 编译时分配内存,即静态分配内存int main(){ static int a = 9; // 静态分配内存 return 0;}/** * 静态分配内存: * 全局变量、静态变量; * 编...原创 2018-09-28 11:21:22 · 111 阅读 · 0 评论 -
C字符串(一)
#include <stdio.h>#include "../include/c_string.h"#define UNUSED 0int main(){ sizeofAndStrlen(); testspc(); strArrOrPtr(); initStr(); return 0;}void sizeofAndStrlen(){ char str[]...原创 2018-09-28 20:34:46 · 154 阅读 · 0 评论 -
字符串IO
#include <stdio.h>#include "../include/c_string_io.h"#define MAXLEN 8int main(){ testFgetsAndFputs(); testLoopFGP(); testScanfAndPrintf(); return 0;}/* * gets():读取整行输入,直至遇到换行符;丢弃换行...原创 2018-09-28 20:36:53 · 209 阅读 · 0 评论 -
C字符串操作
#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;string.h&amp;gt;void testStrFunc();void testStrcat();void testStrcmp();void testStrcpy();void testSrpintf();int main(){ testStrFunc(); testStrcat();原创 2018-09-28 20:38:12 · 152 阅读 · 0 评论 -
C数组首地址
#include <stdio.h>int main(){ int a[4] = {1,2,3,4}; // 数组起始地址值,三种方式 printf("%p\n",a); printf("%p\n",&a); printf("%p\n",&a[0]); /** * a、&a、&a[0]值相同,但意义不同 * a、&原创 2018-10-23 19:52:59 · 1301 阅读 · 0 评论 -
结构体字节对齐
1、什么是字节对齐现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放,这就是对齐。2、字节对齐的原因和作用不同硬件平台对存储空间的处理上存在很大的不同。某些平台对特定类型的数据只能从特定地址开始存取,而不允许其在内存中任意存放。例如Mo...原创 2018-11-10 16:13:05 · 499 阅读 · 0 评论 -
C回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。1、首先使用回调函数,就会用到怎么注册回调函数这个问题。你需要告诉底层代码,它需要调用的函数是什么,那么就得事先定义好回调函数...原创 2019-05-21 19:03:14 · 1715 阅读 · 0 评论 -
数组和指针
#include <stdio.h>void test_arr();void test_arr_point();void test_const();int main(int argc, char const *argv[]){ //test_arr_point(); void test_const(); return 0;}void test...原创 2018-07-23 15:13:18 · 101 阅读 · 0 评论