C语言开发,多级指针,数组指针
1.多级指针
//
// Created by MagicBook on 2023-10-18.
//
#include <stdio.h>
int main() {
//假设内存地址0011
int a = 1;
//*a1=0011 假设*a1的内存地址是0022
//一级指针,取a的内存地址给a1指针
int *a1 = &a;
//**a2存放内存地址0022
//假设他的内存地址是0033
//二级指针,取出一级指针a1的地址给二级指针
int **a2 = &a1;
printf("a1 %p\n", a1);
printf("a2 %p\n", a2);
//第一个*取出0022内存地址的值是0011,第二个*取出0011内存地址所对应的值1
printf("a %d\n", **a2);
return 0;
}
2.数组指针
//
// Created by MagicBook on 2023-10-18.
//
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3};
int i = 0;
for (i = 0; i < 3; ++i) {
printf("i");
}
//数组指针,数组内存地址等于第一个元素的内存地址,三者等价
//假设元素一内存地址1111,元素二内存地址2222,元素三内存地址3333
//arr指向头元素arr == 1111 &arr == arr == 1111
printf("%p\n", arr);
printf("%p\n", &arr);
printf("%p\n", &arr[0]);
//数组本身就是一个内存地址,
int *aaa = arr;
//取出元素1内存地址的值 1
printf("%d\n", *aaa);
aaa++;
//输出2
printf("%d\n", *aaa);
aaa += 1000;
//输出系统值
printf("%d\n", *aaa);
return 0;
}
3.指针遍历数组
//
// Created by MagicBook on 2023-10-18.
//
#include <stdio.h>
int main() {
//连续的内存空间,每次移动4个字节,int数组,
int arr[] = {1, 2, 3};
int *aaa = arr;
int i = 0;
for (i = 0; i < 3; ++i) {
printf("位置%d,值%d\n",i, *(aaa + i));
printf("位置%d,值%p\n",i, (aaa + i));
}
return 0;
}
4.循环赋值
//
// Created by MagicBook on 2023-10-19.
//
#include <stdio.h>
int main() {
int arr[4];
int *arr1 = arr;
//循环赋值
int i = 0;
for (int j = 0; j < sizeof arr / sizeof(int); ++j) {
//拿到元素的内存地址
//取出内存地址所对应的值
*(arr1 + i) = i + 20;
}
return 0;
}
5.数组指针操作方式
//
// Created by MagicBook on 2023-10-19.
//
#include <stdio.h>
int main() {
/*int arr[4];
int *arr1 = arr;
//循环赋值
int i = 0;
for (int j = 0; j < sizeof arr / sizeof(int); ++j) {
printf("%d\n", arr1[i]);
//挪动元素的内存地址,然后再取对应元素的内存地址上面的值
printf("%d\n", *(arr1 + i));
}*/
return 0;
}
6.函数指针(java接口回调)
//
// Created by MagicBook on 2023-10-19.
//
#include <stdio.h>
//add函数也会有自己的内存地址假设是0011,mins,0022,
void add(int a, int b) {
printf("%d\n", a + b);
}
void mins(int a, int b) {
printf("%d\n", a - b);
}
//操作测试 回调到add mins
//void(*method)(int, int)函数指针
//void 返回值
//(*method) 函数名字
//阔以接收地址传递,指针就是地址,函数指针,
void test(void(*method)(int, int), int a, int b) {
method(a, b);
}
int main() {
test(add, 1, 2);
test(mins, 1, 2);
return 0;
}