#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; }