重学二、函数指针&指针运算

2023-11-06

目录

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 = &sum;
	int p =plus(total);

	printf("p的值为:%d", p);//105

	getchar();

	return NULL;
}

输出结果:105

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重学二、函数指针&指针运算 的相关文章

随机推荐