目录
1、多级指针
2、数组与数组指针
3、采用指针遍历数组
4、循环时给数组赋值
5、指针类型有何用
7、.函数指针
1、多级指针
int main(){
int num = 66;
int * pointer = #//一级指针
int **sec_pointer = &pointer;//二级指针
//pointer的值是: 00D3FAEC, sec_pointer的值是:00D3FAE0
printf("pointer的值是: %p\n,sec_pointer的值是:%p\n",pointer,sec_pointer);
printf("*sec_pointer的值是:%p\n", *sec_pointer);//*sec_pointer的值是:00D3FAEC
printf("sec_pointer的值是:%d\n", **sec_pointer);//66
getchar();
return NULL;
}
//通过上面我们可以发现 * pointer 取出内存地址 00D3FAEC 所对应的值 66
// *sec_pointer 取出 内存地址==00D3FAE0所对应的值 00D3FAEC
// 第二个* 取出内存地址==00D3FAEC 所对应的值 66
// **sec_pointer==00D3FAE0
// *sec_pointer ==00D3FAEC
2、数组与数组指针
#include<stdio.h>
int main(){
int arr[] = {11,22,33,44};
for (int i = 0; i < 4; i++)
{
printf("arr===%d\n", arr[i]);
}
printf("arr = %p\n", arr);//00EFFDAC
printf("&arr = %p\n", &arr);//00EFFDAC
printf("&arr[0] = %p\n", &arr[0]);//00EFFDAC
getchar();
return NULL;
}
通过上面 我们发现:
// 数组 和 指针 有关
// 数组的内存地址 == 第一个元素的内存地址 == &arr
// 数组的内存地址 == 第一个元素,不是第二个元素,也不是第n个元素
//既然数组是一个内存地址,我们也可以有如下写法:
int *arr_pointer = arr;
printf("指针arr_pointer的值是:%d\n", *arr_pointer);//11
//指针移动
arr_pointer++;
printf("指针arr_pointer的值是:%d\n", *arr_pointer);//22
3、采用指针遍历数组
#include<stdio.h>
int main(){
int arr[6];
int *arr_pointer = arr;
for (int i = 0; i < 6; i++)
{
*(arr_pointer + i) = (i + 666);
}
for (int i = 0; i < 6; i++)
{
printf("arr_pointer赋值后为:%d\n",*(arr_pointer+i));
}
getchar();
return NULL;
}
结果:
arr_pointer赋值后为:666
arr_pointer赋值后为:667
arr_pointer赋值后为:668
arr_pointer赋值后为:669
arr_pointer赋值后为:670
arr_pointer赋值后为:671
4、循环时给数组赋值
#include<stdio.h>
int main(){
int arr[6];
int *arr_pointer = arr;
for (int i = 0; i < 6; i++)
{
*(arr_pointer + i) = (i + 666);
}
for (int i = 0; i < 6; i++)
{
printf("arr_pointer赋值后为:%d\n",*(arr_pointer+i));
}
getchar();
return NULL;
}
结果:
arr_pointer赋值后为:666
arr_pointer赋值后为:667
arr_pointer赋值后为:668
arr_pointer赋值后为:669
arr_pointer赋值后为:670
arr_pointer赋值后为:671
5、指针类型有何用
指针占用的内存大小是? int double ... 的指针 永远都是 4个字节(32位操作系统) 8个字节(64位操作系统)
指针既然都是 4个字节,为什么还要分 指针类型???
答:取值的时候,怎么取,这就是类型规定的好处
7、.函数指针
函数指针定义 : 返回值(*指针名称)(int,int)。
eg: int(int *sum)(int a,int b) sum就是函数指针变量
int sum(int a, int b){
return a + b;
}
// 定义函数指针: 返回值(*名称)(int,int)
int plus(int(*total)(int a, int b)) {
return total( 5, 100); // 回调给外面
}
int main(){
int(*total)(int a, int b);
total = ∑
int p =plus(total);
printf("p的值为:%d", p);//105
getchar();
return NULL;
}
输出结果:105