
c语言
文章平均质量分 67
Serendipity_00
这个作者很懒,什么都没留下…
展开
-
柔性数组详解
柔性数组引言概念引言#define MAXLEN 1024typedef struct kd_node{ struct kd_node *left; struct kd_node *right; int dim; unsigned long long data[MAXLEN];}kd_node;在这段代码中,为了存储数据,申请了长度为1024的unsigned long long型数组,若是数据的长度远远小于MAXLEN,这样设计,及其浪费空间。在C99标准中给出了新的设计方法,通过原创 2021-12-01 20:16:11 · 1317 阅读 · 1 评论 -
【C语言】动态内存管理
动态内存管理什么是动态内存?动态内存分配函数malloc什么是动态内存?void fun(){ char strb[1024 * 1024] = {0};}int main(){ char stra[1024 * 10] = {0}; fun(); return 0;}运行时程序崩溃,这是为什么呢?分析编译链接过程,我们知道栈区在函数被调用时分配,用来存放函数的参数值,局部变量等。在window中栈的默认大小时:1M,在visual studio中我们可以设置栈区的大小,在L原创 2021-12-01 16:58:55 · 1073 阅读 · 0 评论 -
C语言主函数参数|输出缓冲区问题
这里写目录标题C程序的两个问题主函数参数输出缓冲区C程序的两个问题主函数参数1、主函数默认至少接受一个参数,就是执行程序的命令本身。传递参数时,按照空格来区分传递的参数。2、传递的参数的类型,都是字符串,与用户给定的参数类型无关int main(int argc,char *argv[],char *envp[])argc:参数个数argv:字符指针数组,每一个数组元素都是一个字符指针(字符串)传递的参数列表。envp:环境变量int main(int argc,char *argv[]原创 2021-11-28 18:48:46 · 263 阅读 · 0 评论 -
大小端存储模式的判断与转换
大小端的理解大小端模式的介绍为什么会有大小端存储模式之分大小端模式的判断大小端模式的转换大小端模式的介绍大端模式:是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。小端模式:是指一个数据的低位字节序内容存放在低地址处,高位字节序的内容存放在高地址处。例如:0x12345678在内存中的表示形式。大端模式:小端模式为什么会有大小端存储模式之分在计算机系统中,我们是以字节为单位存放数据的,每个地址单元都对应着一个字节,一个字节为8bit。但在C语言中除了 8 bi原创 2021-11-27 18:50:18 · 913 阅读 · 0 评论 -
共用体(联合体)详解
共用体结构体和共用体的异同点共用体应用结构体和共用体的异同点1、结构体和共用体都可以建立新的数据类型。2、结构体变量的每个数据成员同时被分配了各自独立的存储空间,互相之间没有影响;3、共用体变量的每一个数据成员的起始地址都相同(存储重叠),所有数据成员占用同一段内存,修改一个数据成员会影响其它所有数据成员。4、结构体变量占用的内存大小,大于等于所有数据成员占用内存的总和。(字节对齐)5、共用体变量占用的内存大小,等于最大数据成员占用的内存大小,共用体使用了内存覆盖技术,同一时刻只能保存一个成员的原创 2021-11-27 11:53:54 · 792 阅读 · 0 评论 -
c语言指针详解3
指针与数组的关系数组名被看做数组的第一个元素在内存中的首地址,(sizeof操作中表示所占内存的大小),数组名在表达式中自动转换为一个指向数组第一个元素的指针常量。#define N 5int main(){ int ar[N] = {12,23,34,45,56}; int size = sizeof(ar);//20 printf("%p \n",ar); printf("%p \n",&ar[0]);}ar是数组第一个元素的地址,ar是数组第一个元素ar[0],ar+1原创 2021-11-26 21:08:01 · 143 阅读 · 0 评论 -
C语言指针详解(2)
指针的运算1、类型对指针加一的影响整型int指针变量加1int main(){ const int n = 5; int arr[n] = {1,2,3,4,5}; int *ip = &arr[0];//&arr for(int i = 0;i < n;i++) { printf("%p => %d \n",ip,*ip); ip = ip + 1; } return 0;}double类型指针加1#define N 5int main原创 2021-11-21 21:44:00 · 719 阅读 · 0 评论 -
结构体数据成员相对偏移量的计算
struct Node{ char cha; int ia; char chb; double dx; char str[5]; int ib;}原创 2021-11-21 11:24:19 · 1346 阅读 · 0 评论 -
c语言结构体字节对齐规则
结构体大小struct Node{ char cha; int a; char chb;};int main(){ struct Node nd = {'a',100,'b'}; int size1 = sizeof(nd); int size2 = sizeof(struct Node); int size3 = sizeof nd; printf("%d %d %d \n",size1,size2,size3); return 0;}由于存储变量地址对齐的问题,计算原创 2021-11-19 21:10:04 · 1827 阅读 · 0 评论 -
C语言指针详解(一)
1、什么是指针?计算机中所有的数据都必须放在内存中,不同类型的数据占用不同的字节,char:1字节,int:4字节,为了可以正确的访问这些数据,必须为每个字节编上号码,每个字节的编号都是唯一的,我们将内存中字节的编号称为地址或指针。对于32位操作系统,程序能够使用的内存为4GB(2^32),最小地址为0x0000 0000,最大地址为:0xFFFF FFFF2、指针变量的定义int *p = &value;*表示这是一个指针变量,int,表示是这个指针变量所指向的类型(整型)。指针是内原创 2021-11-17 20:24:38 · 587 阅读 · 0 评论 -
数据的存储方式
1、进制转换计算机中的进制有二进制、八进制、十进制、十六进制,十进制是逢十进一,八进制逢八进一,以此类推,x进制逢x进1。二进制、八进制、十六进制转十进制规律是相同的,都是按权求和(10010)2 = (1 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0)10(234)8 = (2 * 8^2 + 3 * 8^1 + 4 * 8^0)8(1a2) = (1 * 16^2 + a * 10^1 + 2 * 16^0)16十进制转二进制:(103)10原创 2021-11-15 20:08:06 · 3337 阅读 · 0 评论 -
输出一个整数的位数,并逆序、顺序输出它的每一位数字
//求出整数n是几位数,算法原理:统计丢的次数(/=10)int Count(int n){ if(n==0) { return 1; } int tmp=0; while(n!=0) { n/=10; tmp++;//统计丢的次数 } return tmp;}``//求出整数n是几位数,算法原理:统计丢的次数(/=10)int Count(int n){ if(n==0) { return 1; } int tmp=0; while(n!=0) {原创 2020-12-09 10:52:30 · 3279 阅读 · 0 评论 -
实现Swap函数,将两个数交换
一个人至少拥有一个梦想,有一个理由去坚强。心若没有栖息的地方,到哪里都是在流浪——三毛自信心深受打击的我,只能来写写笔记了。刚刚对指针做了基础的学习,那么指针的作用在哪里呢,我们就用Swap函数作一下分析。void Swap(int a, int b)//交换不成功{int tmp = a;a = b;b = tmp;}int main(){int a = 10;int b = 20;printf("交换前:%d,%d\n",a,b)Swap(a,b)printf("交换后:%原创 2020-12-16 14:29:32 · 10255 阅读 · 7 评论