/******************************************************************************************************
* @file name: : test01
* @brief :数组的练习
* @author :wvjnuhhail@126.com
* @date :2024/06/19
* @version 1.0 :V1.0
* @property :暂无
* @note :None
* CopyRight (c) 2023-2024 wvjnuhhail@126.com All Right Reseverd
******************************************************************************************************/
// 假设在32bit系统下计算,32bit系统下的存储单元的编号是32bit的(4字节)
#include <stdio.h>
int main()
{
int a[] = {1, 2, 3, 4}; // 一维数组
printf("%d\n", sizeof(a)); // 16
printf("%d\n", sizeof(a + 0)); // 4 a+0表示数组的第一个元素向后偏移0个元素,所以相当于数组的第一个元素的地址
printf("%d\n", sizeof(*a)); // 4 *a ==> (a+0) 表示数组中第一个元素的地址 *(a+0) 可以得到第一个元素的值,元素是int型,所以sizeof(int) = 4
printf("%d\n", sizeof(a + 1)); // 4 a+1表示数组的第一个元素向后偏移1个元素,所以相当于数组的第2个元素的地址
printf("%d\n", sizeof(a[1])); // 4 a[1]表示第2个元素的值 元素是int型,所以sizeof(int) = 4
printf("%d\n", sizeof(&a)); // 4 &a表示数组本身的地址
printf("%d\n", sizeof(*&a)); // 16 *&可以互相抵消
printf("%d\n", sizeof(&a + 1)); // 4 &a表示数组本身的地址,+1则表示从该地址向后偏移一个数组的大小
printf("%d\n", sizeof(&a[0])); // 4 a[0]表示第一个元素的值,&a[0]表示第一个元素的地址
printf("%d\n", sizeof(&a[0] + 1)); // 4 地址
return 0;
}
/******************************************************************************************************
* @file name: : test02
* @brief :数组的练习
* @author :wvjnuhhail@126.com
* @date :2024/06/19
* @version 1.0 :V1.0
* @property :暂无
* @note :None
* CopyRight (c) 2023-2024 wvjnuhhail@126.com All Right Reseverd
******************************************************************************************************/
#include <stdio.h>
// 假设在64bit系统下计算,64bit系统下的存储单元的编号是64bit的(8字节)
int main()
{
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f'}; // 字符数组
/* 1 */ printf("%d\n", sizeof(arr)); // 6
/* 2 */ printf("%d\n", sizeof(arr + 0)); // 8
/* 3 */ printf("%d\n", sizeof(*arr)); // 1
/* 4 */ printf("%d\n", sizeof(arr[1])); // 1
/* 5 */ printf("%d\n", sizeof(&arr)); // 8
/* 6 */ printf("%d\n", sizeof(&arr + 1)); // 8
/* 7 */ printf("%d\n", sizeof(&arr[0] + 1)); // 8
return 0;
}
/******************************************************************************************************
* @file name: : test03
* @brief :数组的练习
* @author :wvjnuhhail@126.com
* @date :2024/06/19
* @version 1.0 :V1.0
* @property :暂无
* @note :None
* CopyRight (c) 2023-2024 wvjnuhhail@126.com All Right Reseverd
******************************************************************************************************/
#include <stdio.h>
int main()
{
char arr[] = "abcdef";
/* 1 */ printf("%d\n", sizeof(arr)); // 7
/* 2 */ printf("%d\n", sizeof(arr + 0)); // 8
/* 3 */ printf("%d\n", sizeof(*arr)); // 1
/* 4 */ printf("%d\n", sizeof(arr[1])); // 1
/* 5 */ printf("%d\n", sizeof(&arr)); // 8
/* 6 */ printf("%d\n", sizeof(&arr + 1)); // 8
/* 7 */ printf("%d\n", sizeof(&arr[0] + 1)); // 8
return 0;
}
/******************************************************************************************************
* @file name: : test04
* @brief :数组的练习
* @author :wvjnuhhail@126.com
* @date :2024/06/19
* @version 1.0 :V1.0
* @property :暂无
* @note :None
* CopyRight (c) 2023-2024 wvjnuhhail@126.com All Right Reseverd
******************************************************************************************************/
#include <stdio.h>
// 64bit
int main()
{
int a[3][4] = {0}; // 二维数组
/* 1 */ printf("%d\n", sizeof(a)); // 48
/* 2 */ printf("%d\n", sizeof(a[0][0])); // 4
/* 3 */ printf("%d\n", sizeof(a[0])); // 16
/* 4 */ printf("%d\n", sizeof(a[0] + 1)); // 8
/* 5 */ printf("%d\n", sizeof(*(a[0] + 1))); // 4
/* 6 */ printf("%d\n", sizeof(a + 1)); // 8
/* 7 */ printf("%d\n", sizeof(*(a + 1))); // 16
/* 8 */ printf("%d\n", sizeof(&a[0] + 1)); // 8
/* 9 */ printf("%d\n", sizeof(*(&a[0] + 1))); // 16
/* 10 */ printf("%d\n", sizeof(*a)); // 16
/* 11 */ printf("%d\n", sizeof(a[3])); // 16
return 0;
}