二级指针
//二级指针
void main(){
int num = 12;
int *p = #//地址 00cff7d4
int** sp = &p;//0x00CFF7C8 对应的上一个指针 00cff7d4->12
printf("p的值是:%p,sp的地址是:%p\n", p, sp);
//通过二级指针获取最终的值
printf("最终的值:%d", **sp);//*代表取值
getchar();
}
数组和数组指针
//数组和数组指针
void main(){
//定义数组
int arr[] = { 1, 5, 3, 4 };
//遍历数组(这种写法linux系统会有问题)
//for (int i = 0; i < 4; i++){
// printf("arr[%d]的值是:%d\n", i, arr[i]);
//}
////for循环在c和c++的正确写法
//int i = 0;
//for (; i < 4; i++){
// printf("arr[%d]的值是:%d\n", i, arr[i]);
//}
//第一种现象:arr的值=arr地址的值=arr[0]的地址
/*printf("arr=%p\n", arr);
printf("arr&=%p\n", &arr);
printf("arr[0]&=%p", &arr[0]);*/
//获取数组的地址(指针)
int *arr_p = arr;//数组指向的是数组的首地址
//做一系列操作
printf("%d\n", *arr_p);//取值,也就是是arr[0]
//对指针进行+-
arr_p++;
printf("%d\n", *arr_p);//此时实际是arr[1]的数据
//对指针往后移动2位
arr_p += 2;
printf("%d\n", *arr_p);
getchar();
}
采用指针遍历数组循环赋值
遍历
//采用指针遍历数组循环赋值
void main(){
int arr[] = { 1, 2, 3, 4 };
int *arr_p = arr;
int i = 0;
for (; i < 4; i++){
printf("位置%d的值是:%d\n", i, *(arr_p+i));
}
getchar();
}
赋值
void main(){
int arr[4] ;//指定数组的长度是4
int *arr_p = arr;
int i = 0;
for (; i < 4; i++){
*(arr_p + i) = i;
printf("位置%d的值是:%d\n", i, );
}
for (; i < 4; i++){
printf("位置%d的值是:%d\n", i, arr[i]);
}
getchar();
}
指针与数组的几种写法
void main(){
//定义数组
int arr[] = { 1, 5, 3, 4 };
int *arr_p = arr;
int i = 0;
for (; i < 4; i++){
//printf("位置%d的值是:%d\n", i, *(arr+i));//arr默认是arr[0]
printf("位置%d的值是:%d\n", i, arr_p[i]);//==*(arr_p+i)
}
函数指针(回调)
//函数指针(回调)
void add(int num1, int num2){
printf("num1+num2=%d\n", (num1 + num2));
}
void min(int num1, int num2){
printf("num1-num2=%d\n", (num1 - num2));
}
//方法指针
void opereate(void (method)(int, int), int num1, int num2){
method(num1, num2);
}
void main(){
//add(1, 2);
//方法指针怎么定义?方法的返回*(方法的名称)(方法的参数)
//void*(add_p)(int, int);
opereate(add, 1, 2);
opereate(min, 1, 2);
getchar();
}
题目:监听数据压缩回掉
void callback(int current, int total){
printf("压缩的进度是%d/%d\n", current, total);
}
void compress(char*file_name, void (callback)(int, int)){
callback(12,24);
}
void main(){
compress("美女.png", callback);
void(*call)(int,int) = NULL;//声明了一个函数
call = callback;//给函数指针赋值
callback(1, 4);//通过函数指针间接调用
getchar();
}