【学习打卡】第14天 物联网/嵌入式工程师 第二周
2022/8/17 3:22:45
本文主要是介绍【学习打卡】第14天 物联网/嵌入式工程师 第二周,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称: 物联网/嵌入式工程师
课程章节: 第二周 计算机基础和C语言
主讲老师: 大白老师
课程内容:
今天主要学习了数组指针,指针数组和数组指针的区别
课程收获:
首先说数组指针之前得明白:
&数组名与数组名
&数组名表示的是取出整个数组的地址,而不是首元素地址,所以它+1跳过整个数组
数组名在sizeof单独使用时或者被&数组名时表示的是整个数组。
具体的数组指针定义:
指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。
定义就如上述,经常为:
char (*pa)[4];
如果指针数组和数组指针这俩个变量名称一样就会是这样:char *pa[4]和char (*pa)[4],指针数组和数组指针的形成的根本原因就是运算符的优先级问题,所以定义变量是一定要注意这个问题。
pa是一个指针指向一个char [4]的数组,每个数组元素是一个char类型的变量,所以可以写成:char[4] (*pa)
数组指针每次移动的是一个数组的大小
p ++;// p移动了4个元素
转换
数组类型指针---加*---->普通类型指针 int (*p)[3]; p的类型int ()[3]-----------加 * ---------->*p的类型是int *
加深一下理解
#include <stdio.h> int main() { int temp[5] = {1, 2, 3, 4, 5}; int (*p)[5] = &temp;//注意这里p指针被赋值&temp,意思就是p数组指针指向了整个数组的首地址 int i; for(i = 0; i < 5; i++) { printf("%d\n", *(*p + i)); //或者 printf("%d\n", (*p)[i]); } return 0; }
上述printf语句的*p先访问了首地址,通过数组首地址遍历得到结果。
数组指针,指向的是数组所在的内存空间
作业:
答案:
int main() { int a[2][3] = {10, 20, 30, 40, 50, 60}; int (*p)[3] = a; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("a[%d][%d] = %d\n", i, j, a[i][j]); printf("*(a[%d] + %d) = %d\n", i, j, *(a[i] + j)); printf("*(*(a + %d) + %d) = %d\n ", i, j, *(*(a + i) + j)); printf("===================\n"); printf("p[%d][%d] = %d\n", i, j, p[i][j]); printf("*(p[%d] + %d) = %d\n ", i, j, *(p[i] + j)); printf("*(*(p + %d) + %d) = %d\n", i, j, *(*(p + i) + j)); printf("===================\n"); } } return 0; }
每日一句:
大胆迈向未来吧,我们仍在旅途之中
这篇关于【学习打卡】第14天 物联网/嵌入式工程师 第二周的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南