C语言
C语言
du_lijun
这个作者很懒,什么都没留下…
展开
-
char data[0]用法总结
struct MyData{ int nLen; char data[0];}; 1.这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。2.初始化时为:MyData *p = (struct MyData *)malloc(sizeof(struct MyData) + strlen(str))3.练习#include <stdio.h&.原创 2022-03-02 16:42:06 · 1065 阅读 · 0 评论 -
位域学习记录
定义:有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示格式:位域名:位域长度注意:位域只能在整形和字符型中使用,浮点型不能使用位..原创 2021-12-09 14:45:12 · 107 阅读 · 0 评论 -
__attribute__((unused))
表示该函数或变量可能不使用,这个属性可以避免编译器产生警告信息未使用__attribute__((unused)):使用__attribute__((unused)):原创 2021-05-18 15:07:53 · 668 阅读 · 0 评论 -
C:操作符&,|的解析
一、位操作符一般包括&(按位与)、|(桉位或)、还有^。#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include<stdlib.h>int main(){ int a = 0; int b = 4; int c = 6; printf("a & b%d\n", a & b); printf("a | b%d\n", a | b); printf("a | c%d\n", a原创 2021-03-29 14:39:32 · 133 阅读 · 0 评论 -
C:0x0,0,null,NULL,‘0‘,“0“,‘ ‘,“ “区别
关于C语言中 以下常量的区别以及联系。0x0:仅仅是数字0,%d输出0 :经常表示数字0null :不可识别的字符串,识别不了NULL : 经常表示空指针,也可以是数据库里面存的NULL值。指针变量 p 是空指针的判断:if ( p == 0 )if ( p == '\0' )if ( p == 3 - 3 )if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */if ( NULL == p )if ( !p )if ( p =.原创 2021-03-29 10:41:23 · 1817 阅读 · 0 评论 -
剑指Offer习题3、4
主要内容:剑指Offer习题3(二维数组查找)、4(空格替换)思路:代码://一、数组查找//折半(二分)查找int BinSearch(int *arr,int len,int key){ int low = 0; int high = len-1; int mid; while(low <= high) { mid = (low+high)/2; if...原创 2019-01-13 18:32:57 · 128 阅读 · 0 评论 -
C编译、链接与运行
主要内容:初步了解c中预处理、编译、汇编、链接每个阶段扮演什么角色一、预编译阶段:生成“.i”文件,主要为字处理(处理文字)删除注释(注释给人看,机器不用看,所以在预处理阶段,会删除文中所以注释)。宏替换,即字符替换,将宏定义的字符进行替换,不检查错误。加入符号“ # ”开头的文件,比如说加入#include <stdio.h>文件。加入文件的方法是直接将文件拷贝...原创 2018-12-04 09:11:06 · 785 阅读 · 0 评论 -
字符串逆序、转数字、获取最长单词
主要内容:针对于字符串的基本操作:字符串逆序、获取最长单词、数字字符转数字、数字转字符串、十六进制字符串转十进制数 //字符串逆置void Reverse_str(char *str) { char *p; for(p=str;*p!='\0';p++) ; char tmp; p--; while(str < p)//str != p { tmp = *str; ...原创 2018-11-19 09:12:43 · 193 阅读 · 0 评论 -
内存区域管理
主要内容:内存区域管理一、 C中内存区域划分 在C语言中存储区一般分为:堆、栈、全局区(静态区)、常量区 。首先我们明确一些定义:1、全局变量:定义在函数外部的变量称为全局变量;2、局部变量:定义在函数内部的变量称为局部变量;(要注意的是:主函数也是函数,如果在主函数里面定义 int a ,则a是局部变量)。3、Static:表静态,可以用static修饰变量或者函数;static修...原创 2018-11-19 09:13:24 · 216 阅读 · 0 评论 -
字符串函数安全问题
主要内容:字符串安全问题简析一、 几个基本定义无界字符串复制:发生在从一个无界数据源复制数据到一个定长的字符数组,例如标准输入函数gets( ).int main(){ char a[80]; gets(a);//在键盘输入可以无限输入,发生数组越界,因此此函数不安全。 return 0;}因此gets( );函数是不安全的。如果对输入的数据长度加以控制,便不会发生栈溢出...原创 2018-11-06 00:40:35 · 580 阅读 · 0 评论 -
动态内存
主要内容:动态内存malloc、calloc、realloc、free一、 动态内存基本概念动态内存定义 动态内存就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。在实际中当用户无法确定空间大小,或者空间太大,栈(一般大小1Mb)上无法分配时...原创 2018-11-05 23:37:37 · 947 阅读 · 1 评论 -
时间复杂度与空间复杂度
算法复杂度分为时间复杂度和空间复杂度。 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。 时间复杂度:指的是执行一个算法,和问题规模之间的关函数系。用O(n)表示。 空间复杂度:执行一个算法,需要额外的辅助空间和问题规模之间的函数关系。用O(n)表示。一、 时间复杂度问题根据定义,求解算法的时间复杂度的具体步骤是:⑴找出算法中的基本语句; ...原创 2018-11-02 21:57:06 · 145 阅读 · 0 评论 -
二维数组
一、 二维数组定义及其初始化定义:二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,一般形式为类型说明符 类型说明符 数组名 [常量表达式][常量表达式]。初始化及其输出:int main(){ int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //定义 int brr[3][4] =...原创 2018-11-01 17:40:22 · 260 阅读 · 0 评论 -
进制转换
主要内容:进制转换问题一、 例子分析1.二、 方法总结原创 2018-10-21 21:34:21 · 129 阅读 · 0 评论 -
指针在实际使用中的常见错误分析
主要内容:指针在实际使用中的常见错误分析一、 问题引入//用c语言写输入两个数a和b,并交换他们的值常见错误(1)代码:#include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;void fun1(int a,int b){ int tmp; tmp=a; a=b; b=tmp; printf(&amp;amp;quot;a=%d,b=%d\n&amp原创 2018-10-21 19:48:25 · 389 阅读 · 0 评论 -
数组越界问题、指针初入门
主要内容:数组越界问题和指针初入门例子分析一、 数组越界问题例子思考int main(){ int i; int arr[10]; for(i=0;i<=10;i++) { arr[i] = 0; printf("%d\n",i); } return 0;}问题:当运行上述代码时,会出现什么问题?为什么会这样?...原创 2018-10-17 13:18:12 · 1196 阅读 · 0 评论 -
统计一个整型数字位数,逆序、正序输出
题目要求:输入一个n位的整型数字,分别输出其位数、顺序输出、逆序输出。一、 求位数基本思路:每次丢弃数字的个位数字,同时定义一个计算器count,初始化化为零来记录个位数字丢弃的次数,每丢弃一次,计数器加一。其中,丢弃的次数即计算器最终的值就是这个数字的位数。例如:12345,需要丢弃五次,计数器count最终值为5,即12345的位数为5。具体操作见下表:(对数字12345举例)...原创 2018-10-16 09:16:42 · 1191 阅读 · 0 评论