c语言
文章平均质量分 60
风摇烨
这个作者很懒,什么都没留下…
展开
-
结构体内存分布
最近在看c语言结构体内存优化,发现一个这个一个重要难点,写此文章记录下来。以下图表是在不同系统中基本类型数据内存大小和默认对齐模数:以下内存都是从0地址开始。首先请看下面题目:typedef struct BIT_T{ char buf[1]; } BIT;以上结构体内存占用情况怎么样?答案是1字节那么如果是以下结构体呢typedef struct BIT_T2{ char buf[1]; long ret; // short bit; } BIT2;原创 2021-04-29 17:08:14 · 1197 阅读 · 3 评论 -
c语言跳转地址,读写地址
跳转某个地址执行最近看指针,发现有个奇淫方法,直接跳转执行某个地址执行程序。例如:要跳转0x1000地址执行代码,代码是((void)(*)(void))0x1000)()注意:以下测试方法在esp32单片机上执行,在linux上,由于每个应用都是虚拟内存,所以无法通过地址跳转执行某段程序。为什么会这样子可以直接跳转到某个地址执行程序呢?首先先看一个demo。void print(void){ printf("this is a test\r\n");}void app_.原创 2021-04-24 00:19:16 · 3098 阅读 · 3 评论 -
指针长度
最近研究指针,发现这个是个坑,以下总结一些经验char str="1234567890";char str1[]="1234567890";char str2[100]="1234567890";int str3[100]={1,2,3,4,5,6,7,8,9,0}; strlen(str) sizeof(str) sizeof(*str) char *str = "2234567890"; char str[] = "22345...原创 2021-04-20 13:31:04 · 2096 阅读 · 2 评论 -
指针数组和数组指针区别
指针数组和数组指针区别指针数组(array of pointers):定义: 数组就是指针表现形式 : int *a[4] 指针数组,里面元素都是指向int型指针类型数组指针(a pointer to an array)定义: 指向数组的指针表现形式 int(*a)[4] 表示指向数组a的指针,给它赋值时要给一个起始地址。下面直接上demo演示:#include <stdio.h>int main(){ int a[4]={1,2,3,4}; int (原创 2021-04-13 15:16:34 · 101 阅读 · 0 评论 -
函数指针和指针函数区别
函数指针和指针函数区别发现每次面试,面试官都问这个问题,这次我把问题描述清楚,希望各位读者以后比面踩雷。首先,这两者区别是一个是指针变量,一个是函数。指针函数定义: 带指针的函数,本质就是函数,返回值:某一类型指针,就是一个地址值表现形式 : 类型标识符 *函数名(参数列表)示例代码#include <stdio.h>int *add(int a,int b){ static int c= 0; c= a+b; printf("add=%p\原创 2021-04-13 14:52:05 · 163 阅读 · 0 评论