
C语言
文章平均质量分 72
朝辞暮见
关于DeepSeek、开源程序、定制办公自动化工具的学习,请大家可以关注抖音号:1754045136(树懒君)
展开
-
内存的四种分配方式
原文链接:链接1. 堆,由程序员手动分配和释放,如果程序员没有释放,在程序结束时由系统回收,分配方式类似于链表。由于堆是程序员管理的,如果管理不当会导致内存泄露的问题,内存泄露指已经分配的内存空间无法被系统回收也无法被继续使用。解决这个问题,C++可以使用智能指针对象去指向分配的内存,在对象析构时释放内存防止内存泄露。在JAVA中由于有垃圾回收期,因此可以不用担心内存泄露的问题。(但java...转载 2018-08-07 13:17:14 · 2176 阅读 · 0 评论 -
逻辑右移与算数右移
原文链接:链接C/C++语言中逻辑右移和算数右移共享同一个运算符>>。编译器决定使用逻辑右移还是算数右移,根据的是运算数的类型。如果运算数类型是unsigned则采用逻辑右移,而signed则采用算数右移。对于signed类型的数据,如果需要使用算数右移,或者unsigned类型的数据需要使用逻辑右移,都需要进行类型转换。示例代码:#include <iostream...转载 2018-07-29 13:25:30 · 6424 阅读 · 0 评论 -
一语句实现x是否为2的若干次幂的判断
原文链接一语句实现x是否为2的若干次幂的判断#define is2*n(x) ((x & (x - 1))? 0 : 1)int main(void){ int m = 512; cout << ((m & (m - 1)) ? false : true) << endl; //即当m中...转载 2018-07-28 19:28:09 · 3856 阅读 · 0 评论 -
C语言变量存储位置
原文链接:链接全局变量存放在静态存储区,位置是固定的。 局部变量在栈空间,栈地址是不固定的。栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动...转载 2018-07-28 13:53:19 · 1843 阅读 · 0 评论 -
C语言再学习 -- 关键字volatile
原文链接:链接一、volatile 介绍参看:volatile详解参看:C Language Keywords Indicates that a variable can be changed by a background routine.Keyword volatile is an extreme opposite of const.It indicates that ...转载 2018-07-28 12:03:47 · 196 阅读 · 0 评论 -
如何实现两个数交换的交换以及宏定义的编写
原文链接:链接语句实现方法】方法1:不使用中间变量●利用位运算符 a = a^b; b = a^b; a = a^b; → a^= b^ = a^ = b;(不用考虑越界问题)【解释】: 对于a^a =0, a^0 =aa = a^bb = a^b =( a^b) ^b =a^(b ^b) = a^0 = a(交换律)a = a^b = (a^b) ^a =...转载 2018-07-28 11:38:31 · 887 阅读 · 0 评论 -
float 在内存中的储存方式
文档链接:链接float 在内存中的储存方式 C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用 64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是 float还是double在存储方式上都是遵从...转载 2018-07-17 14:54:00 · 352 阅读 · 0 评论 -
标准C函数库和POSIX函数库的关系
转载链接:点击打开链接POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )The C POSIX library is a specification of a C standard library for POSIX systems. It was developed at the same ti...转载 2018-07-07 10:58:14 · 2641 阅读 · 0 评论 -
atoi与atol
NAME atoi, atol, atoll, atoq - convert a string to an integer SYNOPSIS #include <stdlib.h> int atoi(const char *nptr); long atol(const char *nptr); long long atoll(cons...原创 2018-05-28 18:46:34 · 1806 阅读 · 0 评论 -
C高级之内存管理(二)
动态内存分配函数malloc()和free()当我们需要动态地申请一块内存空间的时候,我们可以使用malloc() 函数在内存中的堆区开辟一块空间。当不再使用这块内存存储数据时,必须使用free() 函数释放这块内存。关于这两个函数具体介绍,可以使用man 命令在shell下进行查看,查看方式:man 3 mallocman 3 free 函数原型:void* malloc(unsigned in...原创 2018-05-03 21:36:50 · 146 阅读 · 0 评论 -
C高级之结构体(二)
结构体指针1. 定义结构体指针现定义结构体如下:typedef struct Student{int number;char name[64]; char sex; int age;int score;}student; 像定义其他普通变量定义结构体指针,如下:student student1;student *pstu;pstu = &student1; 2. 通过结构体指针...原创 2018-05-03 19:57:09 · 391 阅读 · 0 评论 -
C高级之结构体(一)
1. 声明一个结构体声明一个结构体的一般形式为struct 结构体名{成员表列;};例如:struct Student{int number;char name[64];char sex;int age;int score;}; 2. 结构体类型占内存大小计算方式内存地址对齐,指的是CPU在访问内存时排列、访问数据的方式。以下是32位计算机不同的数据类型所需要的n个字节对齐。char,...原创 2018-05-03 18:58:20 · 309 阅读 · 0 评论 -
C高级之指针(三)
Constconst关键字修饰变量,表示该变量不可修改。指针变量也是变量,因此也可以使用const关键字修饰。const关键字修饰指针变量常用的有2种用法。 用法1. const <数据类型> *<指针变量名>例如const char *src;说明:const 在 数据类型 前,助记方式:const 在 * 前, 表示该指针指向的内容不可修改。示例:#include &l...原创 2018-05-03 14:29:44 · 274 阅读 · 0 评论 -
C高级之指针(二)
指针函数与函数指针1. 指针函数指针函数的本质是一个函数,这个函数返回一个指针类型的数据,即返回一个地址。指针函数的定义形式为:类型名 *函数名(参数列表)很多字符串处理函数都是指针函数,返回一个字符指针例如:char *strncpy(char *dest, const char *src,size_t n);返回一个指向dest字符串首地址的字符指针char *strncat(char ...原创 2018-05-02 21:50:34 · 164 阅读 · 0 评论 -
C高级之指针(一)
数组指针与指针数组1. 数组指针下面部分程序的目的是想通过函数打印二维数组元素,#include <stdio.h>int array[3][4] = {{1, 2, 3, 4},{5, 6, 7 ,8},{9, 10, 11, 12}}; int print_array(int **p, int m, int n){ inti, j; for(i= 0;...原创 2018-05-02 20:48:04 · 204 阅读 · 0 评论 -
C高级之内存管理(一)
我们写的C语言程序有数据和对数据进行操作的代码,数据又分为全局变量、局部变量、静态变量等。那C程序在运行的时候是如何区分和管理他们的呢?这就是C 语言的内存管理。 C 语言的内存管理的实质就是,将内存划分不同的区域,某段内存区域只会存储相应的数据。C语言对于内存空间的划分如下: 1) 代码段:这段区域主要用来存储编译后的函数体的二进制代码,字符串常量。该区域是只读的,如果试图对该区域进行改写,操...原创 2018-05-02 15:55:44 · 243 阅读 · 0 评论 -
C高级之Static用法
Static用法示例1#include <stdio.h>#include <unistd.h> int fun(void); int main(int argc, const char *argv[]){ while(1) { fun(); sleep(1); } ret...原创 2018-04-30 21:13:58 · 1516 阅读 · 0 评论 -
C高级之函数(四)(若转载请注明出处,请尊重一天的劳动)
汉诺塔问题1. 汉诺塔传说印度教的主神梵天在创造世界的时候创造了三根塔座,在其中一根塔座上从下到上地穿好了由大到小的64个盘子,这就是所谓的汉诺塔。主神梵天命令一个僧侣不论白天黑夜按照下面的法则移动这些盘子:一次只移动一个盘子,不管在哪根塔座上,小盘子必须在大盘子上面。僧侣们预言,当所有的盘子都从梵天穿好的那根塔座上全部移到另外一根塔座上时,世界将会灭亡。2. 问题描述塔座A、B、C。...原创 2018-04-29 20:00:39 · 285 阅读 · 0 评论 -
C高级之函数(三)
函数的递归调用1. 示例:有5个学生,问第5个学生多大,他说比第4个学生大2岁。问第4个学生多大,他说比第3个学生大2岁。问第3个学生多大,他说比第2个学生大2岁。问第2个学生多大,他说比第1个学生大2岁。问第1个学生多大,他说他10岁。求第5个学生的年龄。如果让你编程解决这个问题,你如何解决呢?法1:你也许这样编写:N5 = 10;N4 = N5 + 2 = 12;N3 = N4 + 2 ...原创 2018-04-29 09:33:46 · 248 阅读 · 0 评论 -
C高级之函数(二)
数组名与指针的区别相同:对数组名的操作相当于对指向数组首地址指针的操作,如下:先建立一个数组a[5]int a[5] = {1, 2, 3, 4, 5};取数组第二个元素,可以有一下操作:1. a[1]2. 定义一个指针,通过指针取数组第二个元素int *p;p = a;*(p + 1) 相异:1. 指针是变量,数组名是常量在上面的例子中,p可以做到p=p+1,但是a做不到a=a...原创 2018-04-27 19:42:32 · 122 阅读 · 0 评论 -
C高级之函数(一)
1. 函数定义的几个关键要素详解:1)函数名:函数的标识。2)类型名:函数的类型,即函数的返回值类型。3)参数列表:指函数需要的用于计算的数据。4)函数返回值:返回值必须与函数函数类型匹配。对于void型函数,可以没有返回值或直接写return;5)函数体:函数的执行代码逻辑。 2. 函数传参函数之间的参数传递方式有:复制传递方式,地址传递方式1)复制传递方式把实参的值赋给被调函数中的形参。在被调...原创 2018-04-27 19:06:54 · 807 阅读 · 0 评论 -
C语言基础补习
1. 标识符,变量与常量1)标识符标识符的命名规则:⒈标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线;⒉C语言中的标识符大小写敏感;⒊用户自定义的标识符不能与关键字同名;2)变量 变量表示数据的属性是可变化的,有数据类型关键字进行定义。3)常量常量:在程序执行过程中,其值不被改变的量(1)直接常量:直接引用的数字等;(2)符号常量:使用标识符来代替一个数字(...原创 2018-04-23 18:45:16 · 497 阅读 · 0 评论