新闻详情

新闻详情

首页 / 资讯中心 / 详情

嵌入式基础day09学习笔记

发布时间:2026/9/27 5:24:43来源:尧图网络
嵌入式基础day09学习笔记
多级指针 void指针 const多级指针的基本用法多级指针把一个指向指针变量的指针变量称为多级指针变量对于指向处理数据的指针变量称为一级指针变量指向一级指针变量的指针变量称为二级指针变量二级指针变量的说明形式如下数据类型 ** 指针名 相关代码示例#include stdio.h ​ int main() { int a 10; int * p a; int ** q p; ​ printf(%d %p %p\n, a, p, q); printf(%p %p %p\n, a, p, q); printf(%ld %ld %ld\n, sizeof(a), sizeof(p), sizeof(q)); printf(%d %d %d\n, a, *p, **q); ​ printf(int *:%p %p\n, p, p 1); printf(int **:%p %p\n, q, q 1); ​ return 0; } ​输出结果10 0x7ffd3bfc9c94 0x7ffd3bfc9c98 0x7ffd3bfc9c94 0x7ffd3bfc9c98 0x7ffd3bfc9ca0 4 8 8 10 10 10 int *:0x7ffd3bfc9c94 0x7ffd3bfc9c98 int **:0x7ffd3bfc9c98 0x7ffd3bfc9ca0 ​​多级指针的运算多级指针的运算指针变量加1是向地址大的方向移动一个目标数据多级指针运算也是以其目标变量为单位进行偏移int **pp1移动一个int *变量所占的内存空间int * * *pp1移动一个int **所占的内存空间代码案例#include stdio.h ​ int main() { int a[] {4, 6, 9, 10, 20}; int *p[5]; int n sizeof(a) / sizeof(int); int i; int **q; ​ for (i 0; i n; i) { p[i] a[i]; } for (i 0; i n; i) { printf(%d %d\n, a[i], *p[i]); } ​ q p;//p[0] printf(%d %d %d %d\n, a[1], *p[1], **(q 1), *q[1]); printf(%p %p\n, q, q 1); ​ return 0; }多级指针和指针数组指针数组也可以用另外一个指针来处理。例如有一个一维字符指针数组ps[5]char *ps[5] { Beijing city,……London city } ;定义另一个指针变量pps并且把指针数组的首地址赋予指针ppschar *ps[5]{……}; char ** pps ps;代码案例#include stdio.h ​ int main() { char *s[5] {apple, pear, peach, orange, banana}; char ** p s;//s[0] ​ printf(%s\n, s[1]); printf(%s\n, *(p 1)); ​ p; printf(%s\n, *p); ​ return 0; } ​运算结果pear pear pearvoid指针及用法万能指针万能指针其实就是void *类型的指针而void *指针一般被称为通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针是void型指针时所指向的对象不属于任何类型。因为void指针不属于任何类型不可以对其进行算术运算比如自增编译器不知道其自增需要增加多少。​void指针一般形式为void * 指针变量名称 ;对于void指针在没有强制类型转换之前不能进行任何指针的算术运算万能指针使用规则使用前必须被初始化解引用过程必须强制转换应用案例1#include stdio.h ​ int main() { int a 10; float b 3.14; char c c; ​ void * p; ​ p a; printf(int:%d %d\n, a, *(int *)p); ​ p b; printf(float:%f %f\n, b, *(float *)p); ​ p c; printf(char:%c %c\n, c, *(char *)p); ​ return 0; }输出结果int:10 10 float:3.140000 3.140000 char:c c应用案例2#include stdio.h ​ int main() { int a[] {1, 4, 5, 2, 10, 9}; void * p a; int i; ​ for (i 0; i sizeof(a) / sizeof(int); i) { //printf(%d\n, a[i]); printf(%d , *((int *)p i)); } putchar(\n); return 0; }输出结果1 4 5 2 10 9const变量 const指针常量化变量的值一般说明形式如下const 数据类型 变量名 [表达式] ;常量化变量是为了使得变量的值不能修改变量有const修饰时若想用指针间接访问变量指针也要有const修饰。const放在指针声明的什么位置呢就近原则const修饰谁谁不能改变代码案例#include stdio.h ​ int main() { const int m 10;//int const m 10; int * p m; // error: m; (*p); printf(%d\n, m); return 0; }常量化指针目标表达式一般说明形式如下const 数据类型 * 指针变量名称[ 指针运算表达式] ;常量化指针目标是限制通过指针改变其目标的数值 但指针变量存储的地址值可以修改代码案例#include stdio.h ​ int main() { int m 10; int n 100; const int * p m; //error:(*p); p n; printf(%d\n, *p); return 0; }常量化指针变量一般说明形式如下数据类型 * const 指针变量名称[ 指针运算表达式] ;使得指针变量存储的地址值不能修改。但可以通过 指针变量名称可以修改指针所指向变量的数值代码案例#include stdio.h ​ int main() { int m 10; int n 100; int * const p m; //error:p n; *p 300; printf(%d\n, *p); return 0; }常量化指针变量及其目标表达式一般说明形式如下const 数据类型 * const 指针变量名 指针运算表达式 ;常量化指针变量及其目标表达式使得既不可以修改指针变量的地址也不可以通过*指针变量名称修改指针所指向变量的值代码案例#include stdio.h ​ int main() { int m 10; int n 100; const int * const p m; //error:p n; //error:*p 300; printf(%d\n, *p); return 0; } ​main函数的参数main函数详细格式int main(int argc, const char *argv[])argv为保存命令行参数的字符串指针其中第0个参数是程序的全名以后的参数为命令行后面跟的用户输入的参数argv参数是字符串指针数组其各元素值为命令行中各字符串的首地址。指针数组的长度即为参数个数argc。代码案例#include stdio.h ​ int main(int argc, const char * argv[]) { if (argc ! 3) { printf(usage:%s ip port\n, argv[0]); return 0; } ​ int i; printf(argc%d\n, argc); for (i 0; i argc; i) { //*argv[i] A; printf(%s\n, argv[i]); } return 0; } ​函数的基本用法及传参函数函数是一个完成特定功能的代码模块其程序代码独立通常要求有返回值也可以是空值。一般形式如下:数据类型 函数名称( 形式参数说明 ) {语句序列return[(表达式)];}数据类型数据类型是整个函数的返回值类型。return[(表达式)]语句中表达式的值要和函数的数据类型保持一致。如无返回值应该写为void型函数形式参数说明是逗号””分隔的多个变量的说明形式大括弧对 {语句序列 }称为函数体语句序列是大于等于零个语句构成的代码举例使用函数实现打印hello world#include stdio.h ​ void print_hello(); ​ int main() { print_hello(); return 0; } ​ void print_hello() { printf(hello world\n); } ​函数的调用函数的使用也叫函数的调用形式如下函数名称〈实际参数〉对于无返回值的函数来讲只能形成一个函数调用语句。函数调用可以作为一个运算量出现在表达式中也可以单独形成一个语句。实参就是在使用函数时调用函数传递给被调用函数的数据。代码举例编写函数功能求两个整数的最大值并在main函数中调用该函数#include stdio.h ​ //int get_max(int, int); //int get_max(int a, int b); int get_max(int x, int y); ​ int main() { int i, j; int ret; printf(); scanf(%d%d, i, j); ​ ret get_max(i, j); printf(max:%d\n, ret); ​ return 0; } ​ int get_max(int a, int b) { if ( a b ) { return b; } else { return a; } }函数的声明函数原型声明函数的声明就是指函数原型其中形式参数说明可以缺省说明的变量名称但类型不能缺省例如double power(double, int);编译器从上往下顺序进行编译函数的应用定义求x的N次方值的函数 x是实数, n为正整数代码案例#include stdio.h ​ int global_a 200; double fun_pow(double x, int n); ​ int main() { double x 2; int n 10; printf(%lf\n, fun_pow(x, n)); printf(global_a%d\n, global_a); /* double ret; ret fun_pow(x, n); printf(%lf\n, ret); */ ​ return 0; } ​ double fun_pow(double x, int n) { int i; double ret 1; ​ global_a; ​ for (i 0; i n; i) { ret * x; } return ret; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

3个实战案例揭秘模板网站配置文件如何救活丑站 2026/9/27 6:15:08

3个实战案例揭秘模板网站配置文件如何救活丑站

3个实战案例揭秘模板网站配置文件如何救活丑站 别被那些花里胡哨的模板界面骗了,很多设计师转前端的兄弟都栽在同一个坑里: 模板网站太丑不够用 。…

阅读更多 →
《计算机工程》投稿全流程指南:从选题到审稿意见回复的实操经验 2026/9/27 6:14:55

《计算机工程》投稿全流程指南:从选题到审稿意见回复的实操经验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
网站编辑器哪个好?老手吐血整理的避坑指南 2026/9/27 6:14:49

网站编辑器哪个好?老手吐血整理的避坑指南

网站编辑器哪个好?老手吐血整理的避坑指南 改个需求建站公司拖一周,改个Logo还要收维护费? 别忍了。这种“甲方爸爸”体验,90%的中小企业老板都踩过。 很多老板问我: 网站编辑器哪个好? 是找外包,还是自己上手? 今天不聊虚的,直接上…

阅读更多 →
爱立信通信工程师面试题解析:协议、现网、CLI三维能力图谱 2026/9/27 6:14:49

爱立信通信工程师面试题解析:协议、现网、CLI三维能力图谱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
CyberDog开源代码实战:基于ROS2的四足机器人运动控制与导航 2026/9/27 6:14:42

CyberDog开源代码实战:基于ROS2的四足机器人运动控制与导航

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Expect架构全景图:Supervisor、Agent、Browser、Cookies五大核心包如何协作 2026/9/27 6:14:36

Expect架构全景图:Supervisor、Agent、Browser、Cookies五大核心包如何协作

Expect架构全景图:Supervisor、Agent、Browser、Cookies五大核心包如何协作 【免费下载链接】expect Expect tests your agents code in a real browser 项目地址: https://gitcode.com/gh_mirrors/expect6/expect Expect 是一款让 AI 编程代理在真实浏览器里…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉