当前位置: 首页 > news >正文

南京房产网站建设无锡企业制作网站

南京房产网站建设,无锡企业制作网站,wordpress做企业主页,石家庄今天最新新闻头条C语言的高级编程【内存#xff0c;指针】 基本知识变量gcc size工具 内存分区指针相关定义和赋值指针加法函数指针多级指针数组指针传参 基本知识 变量 变量解释全局变量出现在代码块{}之外的变量就是全局变量局部变量一般情况下#xff0c;代码块{}内部定义的变量就是自动… C语言的高级编程【内存指针】 基本知识变量gcc size工具 内存分区指针相关定义和赋值指针加法函数指针多级指针数组指针传参 基本知识 变量 变量解释全局变量出现在代码块{}之外的变量就是全局变量局部变量一般情况下代码块{}内部定义的变量就是自动变量也可使用auto显示定义。静态变量是指内存位置在程序执行期间一直不改变的变量用关键字static修饰。代码块内部的静态变量只能被这个代码块内部访问代码块外部的静态变量只能被定义这个变量的文件访问。 C语言中函数默认都是全局的可以使用static关键字将函数声明为静态函数只能被定义这个函数的文件访问的函数 gcc size工具 $ size maintext data bss dec hex filename1275 552 8 1835 72b main.text 代码段,用来存放代码,一般是只读的区域; .data数据段,用来存放全局初始化变量,常量,以及全局或局部静态变量,只初始化一次; .bss BSS段,用来存放全局未初化数据,用0初始化; 内存分区 我看了几篇文章有的是5种有的是4种把 【data】和 【bss】 同意称为静态区它们的区别是否初始化 内存区域存放作用text 段字符串常量和函数体的二进制代码通常可共享只读data段已初始化全局变量、静态变量通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。bss段未初始化全局变量、静态变量通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。注意即使是赋值为0也是未初始化Stackmalloc内存分配用于存放进程运行中被动态分配的内存段它的大小并不固定可动态扩张或缩减。Heap局部变量、在函数调用时的形参和返回值为最近被调用的函数分配自动变量和临时变量的存储空间 //main.cpp int a 0; //a在全局已初始化数据区.data char *p1; //p1在.bss未初始化全局变量 main() {int b; //b在栈区 .stackchar s[] abc; //s为数组变量,存储在栈区,.heap//abc为字符串常量存储在已初始化数据区char *p1,p2; //p1,p2在栈区char *p3 123456; //123456\0在已初始化数据区p3在栈区static int c 0; //C为全局静态数据存在于已初始化数据区//另外静态数据会自动初始化p1 (char *)malloc(10);//分配得来的10个字节的区域在堆区p2 (char *)malloc(20);//分配得来的20个字节的区域在堆区//注意p1,p2是局部变量,所以存储在栈中,10Byte空间在堆中;free(p1);free(p2); } FreeRTOS 使用 uxTaskGetStackHighWaterMark() API 函数来查看实际使用了多少栈如果分配的栈比需要的多则可以减少栈大小并且可以使用栈溢出检测特性来确定栈是否太小。 printf( the min free stack size is %d \r\n,(int32_t)uxTaskGetStackHighWaterMark(NULL));指针相关 定义和赋值 int a; //一个整形数 int *a //一个指向整型数的指针 int **a //一个指向指针的指针它指向的指针是指向一个整型数 int a[10] //一个有10个整型数的数组 int *a[10] //一个有10个指针的数组该指针是指向一个整型数的 int (*a)[10] //一个指向有10个整型数数组的指针 //一个指向函数的指针该函数有一个整形参数并返回一个整形数 int * fun(int a); //一个有10个指针的数组该指针指向一个函数该函数有一个整型参数并返回一个整形数 int (*fun[10])(int a) const char *p通常修饰常用的字符串字符串内容不变char * const P通常修饰硬件资源地址不变const char *const p通常修饰地址不可变且内容不可变的ROM 指针指向的内容被非法访问字符串常量不能配访问(text 段)。 #include stdio.h int main() {char *p Hello World !; printf(the one is %p\n,*p); // p为指针那么*p就为p的地址*p a; // 无法修改常量程序编译通过,运行段错误printf(the %x\n,p); }指针操作字符数组 #include stdio.hint main() {char buff[] {Hello World !};char *p1 buff;*p1 a; printf(the %s\n,p1); // 输出aello World ! }const 修饰的指针变量不能改变 #include stdio.hint main() {const char *p Hello World !;char buff[] {Hello World !};char *p1 buff;printf(the one is %x\n,*p1);*p a;printf(the %s\n,p1); }指针加法 指针的加法运算实际上加的是一个地址单位单位大小可以 sizeof(p[0]) int *p xxx 【0x12】p1 【0x121*sizeof(*p))】p 地址更新 p[n] 取地址的值 pn 地址加 下面程序ab两个值的地址是挨着的且b的地址为低地址 #include stdio.h int main() {int a 0x123456789; // 大小越界int b 0x99991199;int *p1 b;char *p2 (char *)b;printf(the p11 is %x,%x,%x\n,*(p11),p1[100],*p11);// 输出 a 越界访问值 b1printf(the p21 is %x\n,p2[1]);// 11 }函数指针 oled 菜单实例 typedef struct {uint8_t Cur_Index; // 当前索引项uint8_t previous; // 上一页uint8_t next; // 下一页uint8_t enter; // 确认uint8_t back; // 返回void (*current_operation)(uint8_t, uint8_t); // 当前索引执行的函数(界面) } Main_Menu;// 各界面的索引值 enum {Main_Page 0,Menu_Rate 1,Menu_Pig 2,Menu_Sys 3,Menu_Net 4,Menu_Inact 5, };static void (*current_operation_func)(uint8_t, uint8_t); // 定义一个函数指针// 菜单索引表 const volatile static Main_Menu table[24] {{Main_Page, Main_Page, Main_Page, Main_Page, Menu_Rate, main_page}, // 主界面{Menu_Rate, Menu_Rate, Menu_Pig, _Local_rate, Main_Page, menu_rate_page}, // 本地比例{Menu_Pig, Menu_Rate, Menu_Sys, _Pig_Info_lin1, Main_Page, menu_pig_info_page}, // 猪只信息{Menu_Sys, Menu_Pig, Menu_Net, _Device_Info, Main_Page, menu_sys_info_page}, // 系统信息{Menu_Net, Menu_Sys, Menu_Inact, _Net_Info, Main_Page, menu_net_info_page} // 网络信息};/* 函数功能刷新界面 参数无 返回值无 */ void menu_ui_refresh(uint8_t key_val) {if (key_val ! 0) // 只有按键按下才刷屏{last_index func_index; // 更新上一界面索引值switch (key_val){case KEY_UP:func_index table[func_index].previous; // 更新索引值break;case KEY_DOWN:func_index table[func_index].next; // 更新索引值break;case KEY_INTER:func_index table[func_index].enter; // 更新索引值break;case KEY_BACK_MENU:func_index table[func_index].back; // 更新索引值break;default:break;}}current_operation_func table[func_index].current_operation;(*current_operation_func)(last_index, key_val); // 执行当前索引对应的函数 }多级指针 指向指针的数组 char **a[10] //一个有10个指针的数组该指针是指向一个字符串的比如几个字符串分布在内存各个区域可以用指针数组把各个字符串地址用指针数组存起来那么这些字符串就又联系了 main 传参 $ ./build 1 2 3 4#include stdio.hint main(int argc,char **argv) {int i 0;while(argv[i] ! NULL){printf(the argv[%x] is %s\n,i,argv[i]);i;}return 0; }数组 定义用处char buf[10]字符串结束以/0结束unsigned char buf[10]传感器数据 指针传参 c #include stdio.h void print(int *p, int sz) {int i 0;for (i 0; i sz; i){printf(%d\n, *(p i));} } int main() {int arr[10] {1, 2, 3, 4, 5, 6, 7, 8, 9};int *p arr;int sz sizeof(arr) / sizeof(arr[0]);// 一级指针p传给函数print(p, sz);return 0; }
http://www.hkea.cn/news/14323041/

相关文章:

  • 南京专业的网站设计团队做一份完整的网站规划书
  • 网站套用WordPress 主题选项框架
  • 创业网站平台排名php发布wordpress文章
  • 最好的网站建设哪家好怎么在百度上做广告
  • 花样云做网站怎样网络平台的建设方案
  • 网站开发 需要用到什么软件有哪些无锡手机网站建设服务
  • 做网站需要注册商标吗wordpress 单点登陆
  • 昆山花桥做网站成都私人定制旅游公司排名
  • 网站后期建设企业门户网站建设论文
  • 做网站不给钱黄石网站建设多少钱
  • 网站建设的目标与思路一家专做中式设计的网站
  • 郑州网站建设技术外包怎么做口子推广网站
  • 上海企业网站备案郑州做网站琴
  • 外贸网站改版公司哪家好网站建设经营服务合同
  • 免费作图网站京东可以免费做特效的网站
  • 四川省建设厅燃气网站罗湖住房和建设局官网
  • html5企业网站开发网站里面的视频功能怎么做
  • 桂林北站离阳朔多远安徽机械加工网
  • html5 网站源代码爬虫做网站相关教程
  • 网站建设平台案例东莞网站优化专家
  • jsp做的网站如何查看哪个平台可以发布免费推广
  • 免费做淘宝客网站有哪些卢镇seo网站优化排名
  • html5制作网站重庆工商局官网
  • 西安推荐企业网站制作平台购物国外网站的建立
  • 拟定一个物流网站建设方案有哪些招聘网站
  • 买高端品牌网站建设郑州做招商的网站
  • 海外贸易在什么网站做茶叶网站程序
  • 推荐家居网站建设关键词优化的策略
  • 类做秋霞的网站新浪网页版
  • 建设网站广州市怎么建设一个公司网站