嵌入式学习第十二天

8.数组指针和指针数组(2):

(1)指针数组:


    int *a[5];
    char *str[5];

    指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作
    二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组成的数组


(2)指针和二维数组的关系:


    int a[2][3] = {0};
    int *p = NULL;
    int (*q)[3] = NULL;


    p = &a[0][0];
    p = a[0];
    p = *a;
    q = a;


二维数组的数组名是指向数组第一行元素的数组指针
访问二维数组第m行第n的方式:
        a[m][n]
        *(a[m]+n)
        *(*(a+m)+n)
        *(p+m*N+n)
        *(*(q+m)+n)
        *(q[m]+n)
        q[m][n]

#include <stdio.h>

int main(void)
{
	int a[2][3] = {1, 2, 3, 4, 5, 6};
	int *p = NULL;
	int (*q)[3] = a;

	p = a[0];

	printf("&a[0][0]:%p\n", &a[0][0]);
	printf("&a[0][1]:%p\n", &a[0][1]);
	printf("&a[0][2]:%p\n", &a[0][2]);
	printf("&a[1][0]:%p\n", &a[1][0]);
	printf("&a[1][1]:%p\n", &a[1][1]);
	printf("&a[1][2]:%p\n", &a[1][2]);
	printf("\n");

	printf("a[0]:%p\n", a[0]);
	printf("a[0]+1:%p\n", a[0]+1);
	printf("a[1]:%p\n", a[1]);
	printf("a[1]+1:%p\n", a[1]+1);
	printf("\n");

	printf("a:%p\n", a);
	printf("a+1:%p\n", a+1);
	printf("\n");

	printf("*(a[1]+1):%d\n", *(a[1]+1));
	printf("*(*(a+1)+1):%d\n", *(*(a+1)+1));
	printf("\n");

	printf("*(p+1*3+1):%d\n", *(p+1*3+1));
	printf("\n");

	printf("*(*(q+1)+1):%d\n", *(*(q+1)+1));
	printf("\n");

	printf("*(q[1]+1):%d\n", *(q[1]+1));
	printf("\n");

	printf("q[1][1]:%d\n", q[1][1]);
	
	return 0;
}

二维数组传参:
        int a[2][3] = {0};
        int Fun(int (*parray)[3], int len);

        char str[5][32] = {0};
        int Fun(char (*pstr)[32], int len);

(3)二级指针:
        1.指针数组传参时 
           int *a[5] = {NULL};  
           a: int **

           char *pstr[5] = {"hello", "world", "how", "are", "you"};
           int Fun(char **ppstr, int len)

#include <stdio.h>

int main(void)
{
	int Num = 0;
	int *p = NULL;
	int **q = NULL;

	p = &Num;
	q = &p;
	
	printf("&Num: %p\n", &Num);
	printf("&p: %p\n", &p);
	printf("&q: %p\n", &q);
	printf("\n");

	printf("q = %p\n", q);
	printf("p = %p\n", p);
	printf("Num = %d\n", Num);
	printf("\n");

	printf("*q = %p\n", *q);
	printf("*p = %d\n", *p);
	printf("\n");

	printf("**q = %d\n", **q);

	return 0;
}

作业:

1.现有二维数组 char str[5][32] = {"hello", "world", "how", "are", "you"};
            封装函数实现对所有字符串的排序
            封装函数实现对所有字符串的打印

2.现有指针数组 char *pstr[5] = {"hello", "world", "how", "are", "you"};
            封装函数实现对所有字符串的排序
            封装函数实现对所有字符串的打印 
 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第十二届蓝桥杯嵌入竞赛是中国著名的计算机竞赛之一,也是我国嵌入技术领域的重要比赛。本次比赛分为个人赛和团体赛两个部分,旨在提高参赛选手在嵌入技术领域的创新能力和实践能力。 参赛选手需要通过开发具有特定功能的嵌入系统来完成比赛任务。这不仅要求选手具备扎实的嵌入技术知识,还需要灵活运用所学的理论知识,具备良好的实践能力和创新意识。 比赛的题目设计涵盖了嵌入系统的各个方面,如硬件设计、软件开发、通信协议等。选手需要根据比赛的要求进行嵌入系统的设计和开发,同时考虑系统的性能、功耗、可靠性等因素,以及解决实际问题的能力。 参与蓝桥杯嵌入竞赛不仅可以让选手通过实践提升嵌入技术能力,还能锻炼选手的综合能力和团队合作精神。在比赛中,选手不仅要独立完成任务,还需要与队友密切配合,共同克服各种困难和挑战。 此外,蓝桥杯嵌入竞赛还为参赛选手提供了一个与业界专家进行交流和学习的机会。在比赛过程中,选手可以与专业人士交流经验,了解行业最新动态,提高自身的专业能力和综合素质。 总之,蓝桥杯嵌入竞赛是一个很好的展示和提升嵌入技术能力的平台。通过参与比赛,选手可以提高自己的实践技能、创新能力和解决问题的能力,为未来在嵌入领域的发展奠定坚实基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值