C语言
文章平均质量分 58
youngseaz
这个作者很懒,什么都没留下…
展开
-
define宏定义中的#,##,@#及/符号
前言本文描述define宏定义中的#,##,@#及/符号的使用方法#的用法宏定义中的#字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。例子#define STR(str) #strSTR(123)会被扩展为123int a = 123;STR(a); // 这里的宏会扩展为"a"这里的宏会扩展为"a"注意对空格的处理忽略传入参数名前面和后面的空格。如:STR( abc转载 2020-11-12 01:43:01 · 3715 阅读 · 0 评论 -
__attribute__
前言本文介绍__attribute__ 的使用方法__attribute__介绍要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或 数据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除 返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。子项描述section将变原创 2020-11-12 01:04:21 · 2004 阅读 · 0 评论 -
手拆ELF32(一,文件头)
EFL32ELF头#define EI_NIDENT (16)typedef struct{ unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ Elf32_Half e_type; /* Object file type */ Elf32_Half e_machine; /* Architecture */ Elf32_Word e_version; /* Object file vers原创 2020-10-13 15:39:15 · 2151 阅读 · 2 评论 -
size_t数据类型
size_t是用于表示对象大小的无符号整数类型,sizeof操作符的结果就属于这种类型,诸如malloc和memcpy等接受这种类型参数明确对象大小。在系统,使用GNU C库,size_t可能是unsigned int或者unsigned long int注意:size_t是声明任意包含对象大小的参数或变量的首选方法This is an unsigned integer type used to represent the sizes of objects. The result of the size翻译 2020-07-26 23:56:52 · 522 阅读 · 0 评论 -
结构体对齐与结构体大小
在C/C++编程中,可以用#pragma pack(n)这个宏定义来说明结构的对齐大小,#pragma pack(n)说明程序中的结构体是按n字节对齐的实例假如有以下结构体typedef struct _A{ char a; int b; short c; long long d;}A;typedef struct _B{ int a; long long b; c...原创 2020-02-29 00:29:57 · 118 阅读 · 0 评论 -
glibc动态内存管理
GNU分配器翻译自 referenceGNU C库的malloc函数实现来自ptmalloc(pthreads malloc),而pthmalloc又用dlmalloc(Doug Lea malloc)实现。malloc函数有两种不同的内存分配方法,这取决于开辟空间的大小或用户传入的具体参数,最常见的分配方法是从一大块连续的内存区域分配一部分出来,并管理这些相邻的区块以优化其使用和减少浪费不可...原创 2020-02-18 11:10:54 · 341 阅读 · 0 评论 -
求数组中的最大差值或最小差值
描述给出长度为n的整数数组arr[n], 有n个整数,求出数组中两个数的最大差值。算法可以先求出最大值和最小值,在一轮循环中求出最大值和最小值,时间复杂度就是O(n),两者之差就是差值最大的。求最小差值也是类似的。程序实现#include<stdio.h>unsigned int max_difference(const int *arr, unsigned int a...原创 2019-08-22 17:13:29 · 6895 阅读 · 0 评论 -
不使用加减乘除将一个数扩大n倍
思路计算机语言中加减乘除运算之前,还有移位,异或,模运算这些位运算操作。不能使用加减乘除那肯定是用位运算操作实现了。C语言程序实现原创 2019-08-20 14:26:54 · 736 阅读 · 0 评论 -
素数环问题
问题链接:https://www.nowcoder.com/questionTerminal/4437f37768eb45fe9b79d88db47ff32a?orderByHotValue=1&mutiTagIds=656&page=1&onlyReference=false问题描述一个环由n个圈组成,将自然数1-n放入圈内,使得任意相邻圈的两个数之和均为素数。第一个...原创 2019-08-07 20:05:36 · 1936 阅读 · 0 评论 -
一道Google算法题:给一个长度为2N的非负整数数组arr。现在每次删除最左端或最右端的元素,重复N次为止。请返回被删掉的数字之和最大是多少。
作者:19600.03链接:https://www.nowcoder.com/discuss/205633?type=2&order=3&pos=184&page=1来源:牛客网题目描述2、给一个长度为2N的非负整数数组arr。现在每次删除最左端或最右端的元素,重复N次为止。请返回被删掉的数字之和最大是多少。例:[1,2,3,4] =>...原创 2019-08-07 11:39:58 · 381 阅读 · 0 评论 -
C语言实现大数转二进制
基本思想是列竖式,每轮求出商和余数。例如:大数字符串是“1234”第一次 “1234” / 2 = 0617 … 0在本文例子中,首先将大数最高位字符 '1' 转换成整数转换成整数 1 然后计算 1 / 2 = 0, 再把 0 转换成字符 '0' 放到缓存区中,这是得到商 的最高位。计算次高位 '2' 时,由于前一位 1 % 2 = 1,此时会有借位 发生,也就是 (1*10...原创 2019-05-23 18:54:25 · 2145 阅读 · 0 评论 -
素数的快速判断方法
原理:大于等于5的素数与6的倍数相邻证明所有自然数可以用集合A = { 6n, 6n+1, 6n+2, 6n+3, 6n+4, 6n+5 }表示,其中 n >= 0,显然,子集B = {6n, 6n+2, 6n+3, 6n+4}内的元素都不是素数,所以只有6n+1和6n+5可能是素数,素数一定可以用6n+1和6n+5其中的一个形式表示,即大于等于5的素数与6的倍数相邻 。#incl...原创 2019-05-25 12:30:38 · 6828 阅读 · 4 评论 -
C语言字符串分割
在C语言中,内置的函数库中除了可以用strtok()来对字符串进行分割之外,还可以用sscannf()对字符串进行分割。sscanf()包含的头文件 stdio.h原型 int sscanf(const char *str, const char *format, ...)实例:#include<stdio.h>int main(){ char buf[] = "...原创 2018-12-31 14:34:49 · 42147 阅读 · 3 评论