代码语言: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;
}