【学习打卡】第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天 物联网/嵌入式工程师 第二周的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程