样例一:
#include <stdio.h>
// 数组与数组指针。
int mainT3() {
// 定义数组
// int [] arr = {1,2,3,4}; 错误的写法
int arr[] = {1,2,3,4};
// 遍历数组
// 其他平台不能用 Clion能用, Linux上报错
/*for (int i = 0; i < 4; ++i) {
}*/
// VS非常严格,规范, CLion包容
// Linux上没有问题,Clion没有问题,Mac没有问题
int i = 0;
for (i = 0; i < 4; ++i) {
printf("%d\n", arr[i]); // 取值
}
// 数组 和 指针 挂钩
// 数组的内存地址 == 第一个元素的内存地址 == &arr,下面打印结果相同
// 数组的内存地址 == 第一个元素,不是第二个元素,也不是第n个元素
printf("arr = %d\n", arr);//arr = 9829792
printf("&arr = %d\n", &arr);//&arr = 9829792
printf("&arr[0] = %d\n", &arr[0]);//&arr[0] = 9829792
// 既然数组就是一个内存地址
int * arr_p = arr;
printf("%d\n", *arr_p); // *arr_p 取出元素一内存地址的值 1
arr_p ++; // 指针挪动 元素二的内存地址了
printf("%d\n", *arr_p); // *arr_p 取出元素二内存地址的值 2
arr_p += 2;
printf("%d\n", *arr_p); // 输出4
// 输出1
arr_p -= 3; // 挪动指针指向到 元素一
printf("%d\n", *arr_p);
arr_p += 2000;
printf("%d\n", *arr_p); // 系统值 572662306
// 以后:我想 三维数组/三级指针
// int *** arrPpp;
return 0;
}
样例二:
#include <stdio.h>
// 3.采用指针遍历数组。
int mainT4() {
// 定义数组
// int [] arr = {1,2,3,4}; 错误的写法
int arr[] = {1,2,3,4};
// 数组是连续的内存空间(没有断层,有规律) 数组 每次挪动 4个字节 == int数组
int * arr_p = arr;
int i = 0;
for (i = 0; i < 4; ++i) {
printf("位置%d的值是:%d\n", i, * (arr_p + i));
// 04 08 12 16
printf("位置%d的内存地址是:%p\n", i, (arr_p + i));
}
return 0;
}
样例三:
#include <stdio.h>
// 4.循环时给数组赋值。
int mainT5() {
// 定义数组
// int [] arr = {1,2,3,4}; 错误的写法
int arr[4];
int * arrP = arr;
// sizeof arr == sizeof(arr)
// 循环赋值操作
int j = 0;
for (j = 0; j < 4; ++j) {
// 1.拿到 元素一 元素二 元素三 元素四 的内存地址 (arrP + j)
// 2.取出 元素一 元素二 元素三 元素四 的内存地址 所对应的值 * (arrP + j)
* (arrP + j) = (j + 10001);
}
// sizeof arr = 16(sizeof arr) / 4(sizeof(int))
// 变量 刚刚赋值的数组
for (int i = 0; i < sizeof arr / sizeof(int); ++i) {
printf("位置%d的值是:%d\n", i, * (arrP + i));
}
return 0;
}
样例四:
#include <stdio.h>
// 5.数组指针操作的几种方式。
int mainT6() {
int arr[] = {1,9,0,9999};
int * arrP = arr;
for (int i = 0; i < 4; ++i) {
// printf("%d\n", arrP[i]);
// printf("%d\n", *(arrP + i)); // + i 挪动元素3内存地址 再取元素3内存地址所对应的值
// printf("%d\n", *arrP + i); 放后面解释
}
return 0;
}
样例五:
#include <stdio.h>
// 6.指针类型有何用?。
int mainT7() {
int num = 12;
int * num_p = #
// 优化处理,报错:检测无法通过的
double * num_p_d = num_p;
printf("%d\n", sizeof num_p);
printf("%d\n", sizeof num_p_d);
// 指针占用的内存大小是? int double xxx 的指针 永远都是 4个字节(32) 4*2(64)
// 6.指针类型有何用?。 既然都是 4个字节,为什么还要分 指针类型
// 答:取值的时候,怎么取,这就是类型规定的好处
// int * p; // 类型是为了计算偏移量
char c = 'a';
// char * p = &c;
// char * p = "AAAA";
return 0;
}
网友评论