嵌入式day6(2022.1.12)

简介: 嵌入式day6(2022.1.12)
#include <stdio.h>
int main()
{
// int: 元素类型(数组中所有元素的相同类型)
// arr: 数组名(数组名就是首元素地址)
// [5]: 数组长度(元素个数)
//    ----> 代表定义了5个int数据类型(5*4=20字节)
  // int arr[5];    // 如果未初始化,其中会是随机值
  // int arr[5] = {1, 2, 3, 4, 5};    //逐个初始化
  int arr[5] = {1, 2, 3};   // 如果只初始化某几个,剩余元素会被自动置0
  printf("size: %ld\n", sizeof(arr));
  printf("arr[0]: %d\n", arr[0]); // 访问第0个元素(下标为0)
  printf("arr[1]: %d\n", arr[1]); // 访问第1个元素(下标为1)
  printf("arr[2]: %d\n", arr[2]); // 访问第2个元素(下标为2)
  printf("arr[3]: %d\n", arr[3]); // 访问第3个元素(下标为3)
  printf("arr[4]: %d\n", arr[4]); // 访问第4个元素(下标为4)
    // 下列访问属于<非法访问>(访问了未申请的内存)
  printf("arr[5]: %d\n", arr[5]); // 访问第5个元素(下标为5)
  return 0;
}


#include <stdio.h>
// 显示数组所有元素
// void show_array(int len, int arr1[10]);
// void show_array(int len, int arr1[]);
// void show_array(int len, int a[len]);  // 变长数组
void show_array(int len, int *a);   // 指针类型
int main()
{
  // int arr1[10] = {[9]=666, [5]=888}; // 指定元素初始化
  int arr1[10] = {[0 ... 4]=666, [5 ... 9]=888};  // 元素批量初始化
  // int arr2[100] = {[0 ... 4]=666, [5 ... 9]=888};  // 元素批量初始化
  show_array(10, arr1);
  // show_array(100, arr2);
  arr1[9] = 123;
  show_array(10, arr1);
  return 0;
}
// 显示数组所有元素
// (无论何种类型写法,编译器最终都会以指针类型进行传递)
// void show_array(int len, int a[10])  // 数组原型
// void show_array(int len, int a[])  // 柔性数组
// void show_array(int len, int a[len]) // 变长数组
void show_array(int len, int *a)    // 指针类型
{
  int i;
  for(i=0; i<len; i++)
    printf("%d ", a[i]);
  printf("\n");
}


#include <stdio.h>
// 显示数组所有元素
// void show_array(int len, int arr1[10]);
// void show_array(int len, int arr1[]);
// void show_array(int len, int a[len]);  // 变长数组
void show_array(int len, int *a);   // 指针类型
int main()
{
// 柔性数组
  // int arr1[] = {1, 2, 3};  // 内存占用为12字节
  int arr1[] = {};      // 内存占用0字节
  // 下列操作为非法内存访问。
  arr1[0] = 123;    
  show_array(3, arr1);
  printf("size: %ld\n", sizeof(arr1));
// 变长数组
  int len;
  scanf("%d", &len);
  int arr2[len];
  return 0;
}
// 显示数组所有元素
// (无论何种类型写法,编译器最终都会以指针类型进行传递)
// void show_array(int len, int a[10])  // 数组原型
// void show_array(int len, int a[])  // 柔性数组
// void show_array(int len, int a[len]) // 变长数组
void show_array(int len, int *a)    // 指针类型
{
  int i;
  for(i=0; i<len; i++)
    printf("%d ", a[i]);
  printf("\n");
}


#include <stdio.h>
int main()
{
  // 一维数组
  int arr1[3] = {1, 2, 3};
  // 二维数组
  int arr2[2][3] = {1, 3, 5, 2, 4, 6};
  printf("%d\n", arr2[0][0]); // 1
  printf("%d\n", arr2[0][1]); // 3
  printf("%d\n", arr2[1][0]); // 2
  return 0;
}


#include <stdio.h>
// 显示二维数组数据
// void show_2d_array(int line, int col, int a[5][10]);   // 数组原型
// void show_2d_array(int line, int col, int a[line][col]); // 变长数组
// void show_2d_array(int line, int col, int a[][col])    // 柔性数组
void show_2d_array(int line, int col, int (*a)[col]);   // 指针类型
int main()
{
  int arr[5][10] = {
    [0][0 ... 9]=1, 
    [1][0 ... 9]=2,
    [2][0 ... 9]=3,
    [3][0 ... 9]=4,
    [4][0 ... 9]=5
  };
  show_2d_array(5, 10, arr);
  return 0;
}
// 显示二维数组数据
// void show_2d_array(int line, int col, int a[5][10])    // 数组原型
// void show_2d_array(int line, int col, int a[line][col])  // 变长数组
// void show_2d_array(int line, int col, int a[][col])    // 柔性数组
void show_2d_array(int line, int col, int (*a)[col])    // 指针类型 
{
  int i, j;
  for(j=0; j<line; j++)   // 行
  {
    for(i=0; i<col; i++)  // 列
      printf("%d ", a[j][i]);
    printf("\n");
  }
}


#include <stdio.h>
int main()
{
  int a = 100;
  int *p1 = &a; 
// 说法1:定义了指针类型p1,存储着变量a的地址
// 说法2:定义了指针指针p1,指向a
// 地址都是系统随机分配的。
  printf("%p\n", &a);   // 变量a的地址
  printf("%p\n", p1);   // 指针p1存储的地址
  printf("0x%lx\n", (unsigned long)p1); // 指针p1存储的数据 
  printf("a: %d\n", a);
  char *p2;
  short *p3;
  double *p4;
  printf("%ld %ld %ld %ld\n", sizeof(p1), sizeof(p2), sizeof(p3), sizeof(p4));
  return 0;
}


#include <stdio.h>
int main()
{
  int arr1[5] = {1, 3, 5, 7, 9};
  printf("    数组名: %p\n", arr1);
  printf("首元素地址: %p\n", &arr1[0]);
  return 0;
}


#include <stdio.h>
int main()
{
  // & 取址符        通过变量获取其地址
  // * 取值符(解引用)  通过地址获取其变量
  int a = 100;
  int *p1 = &a;
  printf("%d\n", *&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a);
  printf("%d\n", *p1);
  // 指针的算术运算
  int arr[5] = {1, 3, 5, 7, 9};
  int *p2 = &arr[0];
  printf("1: %d\n", *p2); // 打印数据: 1
  printf("p2  : %p\n", p2);
  printf("2: %d\n", *(p2+1)); // 打印数据: 3
  printf("p2+1: %p\n", p2+1);   // 向右偏移4字节(int *)
  char *p3 = (char *)&arr[0];
  printf("3: %d\n", *(p3+4));   // 打印数据: 3
  printf("p3+1: %p\n", p3+4);   // 向右偏移1字节(char *)
  return 0;
}
相关文章
|
1月前
|
机器学习/深度学习 人工智能 安全
嵌入式会越来越卷吗?
嵌入式系统,融合硬件与软件,正以前所未有的速度普及和多样化。从智能手机到医疗保健,它们无处不在,推动着技术边界不断扩展。随着AI和IoT的发展,嵌入式系统变得更智能、高效。然而,技术进步也带来了安全挑战,数据保护和系统稳定性成为重要议题。未来,嵌入式系统将在物联网中扮演关键角色,同时教育和跨领域合作将塑造其发展路径。面对挑战,我们需要创新与合作,确保其健康且持续的进步。
27 0
|
2月前
|
Linux C语言 C++
嵌入式
嵌入式
21 0
|
10月前
|
传感器 人工智能 安全
有什么是嵌入式不能满足的?
从20世纪60年代开始,嵌入式系统就已经开始出现,当时主要应用于航空航天、国防、工业自动化等领域
|
11月前
|
Linux Windows
day9嵌入式(2022.1.15)
day9嵌入式(2022.1.15)
66 0
|
11月前
|
C语言
嵌入式day4(2022.1.10)
嵌入式day4(2022.1.10)
62 0
|
11月前
|
机器学习/深度学习 C语言
嵌入式day5(2022.1.11)
嵌入式day5(2022.1.11)
98 0
|
11月前
|
存储
day7嵌入式(2022.1.13)
day7嵌入式(2022.1.13)
52 0
|
11月前
|
数据安全/隐私保护 C语言
day12嵌入式(2022.1.18)
day12嵌入式(2022.1.18)
73 0
|
11月前
|
自然语言处理 编译器 C语言
day11嵌入式(2022.1.17)
day11嵌入式(2022.1.17)
68 0
|
传感器 设计模式 Ubuntu
嵌入式到底该怎么学
其实一直有人问我嵌入式怎么学,今天跟大家讲讲我的理解。因为嵌入式是一个泛的概念,可能很多人认为嵌入式就是嵌入式Linux。但是其实并不仅仅只有Linux, 像STM32,51单片机也属于这个范畴之内的,它们有的也可以跑协议栈,跑ucos等系统。所以其实嵌入式是有很多方向的,选择一个方向,做好,做精,都是有前途的。接下来,跟大家探讨一下嵌入式的一些方向,和如何去学习。我以前也是摸索着过来的,没人告诉我如何学习,也没有学习线路,所以走了很多弯路。所以希望这篇文章可以帮助到一些正在学习的人,当然这些内容可能有主观的东西,欢迎大家一起探讨吧。