
C语言
文章平均质量分 51
cyang812
https://cyang.tech
展开
-
leetcode 29.两数相除
一、题目leetcode给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.3333原创 2020-09-25 21:22:09 · 299 阅读 · 0 评论 -
enum枚举类型
阅读下面的程序,写出输出内容。#include <stdio.h>enum { ITEM_A = 0, ITEM_B = 0, ITEM_C};int main(int argc, char const *argv[]){ printf("%d\n", ITEM_C); return 0;}原创 2019-04-14 15:19:52 · 454 阅读 · 0 评论 -
ide 与 leetcode 运行结果不一样
在做 leetcode 的第 15 题, 3Sum 时发现,同样的代码在本地运行的结果是正确的,而在 leetcode 的服务器上结果却是错误的。而且检查了程序中,也并没有使用全局或者静态变量。通过打印,仔细对比两种环境下的输出发现,原来是在代码有一条语句指针指向了数组外边的第一个地址。语句是内容是比较当前地址的值是否和后一个地址的值相同, 由于后一个地址实际上已经发生了溢出,在当前地址为...原创 2018-09-15 15:07:15 · 11604 阅读 · 1 评论 -
前导零计数
前导零计数计算一个 32位 数头部 0 的个数。例如 1 前面有 31 个0, 0 则前面有 32 个0。C 语言实现int cntLeadingZeros(uint32_t i){ int ret = 0; uint32_t temp = ~i; while(temp & 0x80000000) { temp <<...原创 2018-08-02 18:03:06 · 8464 阅读 · 1 评论 -
C语言中,隐藏结构体的细节
本文转载自 博客园我们都知道,在C语言中,结构体中的字段都是可以访问的。或者说,在C++ 中,类和结构体的主要区别就是类中成员变量默认为private,而结构体中默认为public。结构体的这一个特性,导致结构体中封装的数据,实际上并没有封装,外界都可以访问结构体中的字段。C++中我们尚可用类来替代结构体,但是,C语言中是没有类的,只能用结构体,但很多时候,我们需要隐藏结构体的字段,不让外...转载 2018-04-18 17:49:48 · 736 阅读 · 1 评论 -
C语言 符号的不同意义
C语言的许多符号在不同的上下文环境里有不同的意义,相当于被“重载”了。如下展示了一些符号的不同意义。static在函数内部,表示该变量的值在各个调用间一直保持延续性。类似与全局变量,区别在于作用域不同。在函数外部,表示该函数或者变量只对本文件可见。extern用于函数定义,表示全局可见(属于冗余,因为函数名在默认情况下具有外部的链接属性,如果函数没有在调用它的转换单元中定义,编...原创 2018-03-27 22:53:22 · 2803 阅读 · 2 评论 -
C语言 ringBuffer 实现
一、 ringBuffer 介绍ringBuffer 称作环形缓冲,也有叫 circleBuffer 的。就是取内存中一块连续的区域用作环形缓冲区的数据存储区。这块连续的存储会被反复使用,向 ringBuffer 写入数据总是从写指针的位置开始,如写到实际存储区的末尾还没有写完,则将剩余的数据从存储区的头开始写;从该 ringBuffer 读出数据也是从读指针的位置开始,如读到实际存储区的末尾...原创 2018-03-22 20:30:13 · 17096 阅读 · 7 评论 -
C语言 malloc 内存泄漏
错误代码如下:int Init_layer2_Decoder(void){ Stream = (struct mad_stream*)malloc(sizeof(struct mad_stream)); Frame = (struct mad_frame*)malloc(sizeof(struct mad_frame)); Synth = (struct mad_...原创 2018-03-18 20:33:29 · 1359 阅读 · 0 评论 -
不使用中间变量交换两数
交换两个数的值是比较基础也比较常用的算法,比如在冒泡排序法中,从第一数开始比较,如后一个数比其小则交换两数的值。一般在交换两数的值是,最简单的方法适用的方法就是用中间变量暂存一个数。例如,要交换a,b的值,可使用中间变量c暂存其中的一个数。 核心代码如下:c=b;b=a;a=b;当然也可以不使用中间变量的方法,如以下几种方法。1、加法: 核心代码如下:a=a+b;b=a-b;a=a-b;原创 2016-06-01 21:04:05 · 1555 阅读 · 0 评论 -
C语言宏定义的几种简单用法
1、计算数组的大小#define countof(a) (sizeof(a)/sizeof(*(a)))2、转换大小写字母#define FS_TOUPPER(x) ((((x) >= 'a') && ((x) <= 'z')) ? (x) - 'a' + 'A' : (x))#define FS_TOLOWER(x) ((((x) >= ...原创 2016-11-29 16:49:35 · 7747 阅读 · 0 评论 -
字符串指针与字符数组的区别
本文转自 优快云 博客http://blog.youkuaiyun.com/okliujieko/article/details/6821321, 代码部分略作修改,从C++ 转成 C;修改了原文中的错别字;增加部分内容用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放转载 2017-03-18 14:04:06 · 749 阅读 · 0 评论 -
C语言 查找字符串子串 返回位置
主要的思路就是,不断的从母串 str1 中取出和子串长度相等的临时子串 temp_str,与子串 str2 进行比较。没有找到子串,返回 -1;成功找到子串,返回子串首字母在母串中的位置,该位置从 0 开始。#include <stdio.h>#include <string.h>char temp_str[30]; // 临时子串void ReadStrUnit(char * str,ch原创 2017-04-12 19:12:43 · 27049 阅读 · 5 评论 -
C语言变量声明加冒号的用法
原文链接:博客园 C语言变量声明加冒号的用法有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就转载 2017-06-30 12:12:24 · 1755 阅读 · 0 评论