嵌入式day6(2022.1.12)

2022-12-02 14:31:09 浏览数 (1)

代码语言:javascript复制
#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: %ldn", sizeof(arr));

	printf("arr[0]: %dn", arr[0]);	// 访问第0个元素(下标为0)
	printf("arr[1]: %dn", arr[1]);	// 访问第1个元素(下标为1)
	printf("arr[2]: %dn", arr[2]);	// 访问第2个元素(下标为2)
	printf("arr[3]: %dn", arr[3]);	// 访问第3个元素(下标为3)
	printf("arr[4]: %dn", arr[4]);	// 访问第4个元素(下标为4)
		// 下列访问属于<非法访问>(访问了未申请的内存)
	printf("arr[5]: %dn", arr[5]);	// 访问第5个元素(下标为5)

	return 0;
}

代码语言:javascript复制
#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");
}
代码语言:javascript复制
#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: %ldn", 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");
}
代码语言:javascript复制
#include <stdio.h>

int main()
{
	// 一维数组
	int arr1[3] = {1, 2, 3};

	// 二维数组
	int arr2[2][3] = {1, 3, 5, 2, 4, 6};

	printf("%dn", arr2[0][0]);	// 1

	printf("%dn", arr2[0][1]); // 3

	printf("%dn", arr2[1][0]); // 2
	

	return 0;
}
代码语言:javascript复制
#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");
	}
}
代码语言:javascript复制
#include <stdio.h>

int main()
{
	int a = 100;
	int *p1 = &a;	
// 说法1:定义了指针类型p1,存储着变量a的地址
// 说法2:定义了指针指针p1,指向a

// 地址都是系统随机分配的。
	printf("%pn", &a);		// 变量a的地址
	printf("%pn", p1);		// 指针p1存储的地址
	printf("0x%lxn", (unsigned long)p1);	// 指针p1存储的数据 

	printf("a: %dn", a);

	char *p2;
	short *p3;
	double *p4;
	printf("%ld %ld %ld %ldn", sizeof(p1), sizeof(p2), sizeof(p3), sizeof(p4));




	return 0;
}
代码语言:javascript复制
#include <stdio.h>

int main()
{
	int arr1[5] = {1, 3, 5, 7, 9};

	printf("    数组名: %pn", arr1);

	printf("首元素地址: %pn", &arr1[0]);

	return 0;
}
代码语言:javascript复制
#include <stdio.h>

int main()
{
	// & 取址符			 	通过变量获取其地址
	// * 取值符(解引用)	 通过地址获取其变量
	int a = 100;
	int *p1 = &a;

	printf("%dn", *&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a);
	printf("%dn", *p1);

	// 指针的算术运算
	int arr[5] = {1, 3, 5, 7, 9};
	int *p2 = &arr[0];
	printf("1: %dn", *p2);	// 打印数据: 1
	printf("p2  : %pn", p2);

	printf("2: %dn", *(p2 1));	// 打印数据: 3
	printf("p2 1: %pn", p2 1);		// 向右偏移4字节(int *)

	char *p3 = (char *)&arr[0];
	printf("3: %dn", *(p3 4));		// 打印数据: 3
	printf("p3 1: %pn", p3 4);		// 向右偏移1字节(char *)

	return 0;
}

0 人点赞