欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

指针数组、数组指针、函数指针、函数指针数组详解

程序员文章站 2024-02-29 18:27:52
...

总结指针和数组部分的相关知识自己写的一遍博客:

指针是变量单元的地址,地址指向该变量单元,因此地址形象的称为“指针”,通过指针(地址)可以找到内存单元。

  (总结)1.指针是存放地址才出现的,地址是为了标示一块地址空间的;
                2.指针让地址有地方存放,指针让内存的访问更加方便;
                3.指针的大小在
32位平台是4个字节,在64位平台是8个字节。

#include <stdio.h>
int main()
{
    int a = 10;         //在内存中开辟一块空间,初始化为10
    int *p = &a;        //这里我们对变量a,取出它的地址,可以使用&操作符,地址类型为int* 
                       //将变量a的地址存放在p变量中,p就是一个指针变量,该指针变量指向a这块空间
return 0;
}


一级指针 :变量的指针

int main()
{
	int a = 10;
	int *pa = &a;                   //整型指针pa保存变量a的地址
	printf("%d\n", *pa);            //解引用pa,通过指针pa找到该空间的值为10
	return 0;
}

二级指针 :指针变量也是变量,是变量就有地址 ;所以变量地址的指针就是二级指针变量

int main()
{
	int a = 10;
	int *pa = &a;                     //整型指针变量pa保存整型变量a的地址
	int **ppa = &pa;                 //ppa保存pa的地址
	printf("%d\n", **ppa);           //两次解引用,找到a的值为10
	return 0;
}

指针数组、数组指针、函数指针、函数指针数组详解

一维数组 :

int main()
{
	int arr[10] = { 0 };                 //arr数组保存十个元素,数组元素初始化为0
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr[i]);      //打印arr数组的十个元素
	}
	return 0;
}

二维数组

int main()
{
	int arr[3][3] = { 0 };                           //初始化三行三列元素,每个元素初始化为0
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%d\n", arr[i]);          //打印九个元素,均为0
		}
		printf("\n");
	}
	return 0;
}

指针和数组的运算 

int main()
{
	int ch[5] = { 1, 2, 3, 4, 5 };      
	int *cp = &ch;
	&ch;                 //取出ch空间的地址
	cp;                  //cp保存ch空间的地址
	&cp;                 //取出的地址为二级指针
	*cp + 1;             //指向数组后面的内容,随机值   
	*(cp + 1);           //取出元素2
	
}

指针数组 

     用于存储指针的数组,也就是数组元素都是指针

数组指针 

         指向数组的指针

int main()
{
	int c[4] = { 1, 2, 3, 4 };
	int *a[4];          //指针数组
	int(*b)[4];        //数组指针
	b = &c;           //将数组c中元素赋给数组a
	for (int i = 0; i<4; i++)
	{
		a[i] = &c[i];
	}
	printf("%d", *a[1]);    //输出2
	printf("%d",(*b)[2] );  //输出3
	return 0;
}

函数指针 

/*
* 求最小值
* 返回值是int类型,返回两个整数中较小的一个
*/
int min(int a, int b) {
	return a < b ? a : b;
}

int(*f)(int, int); // 声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数  

int _tmain(int argc, char* argv[])
{
	f = max; // 函数指针f指向求最大值的函数max  
	int c = (*f)(1, 2);
	f = min;    // 函数指针f指向求最小值的函数min  
	c = (*f)(1, 2);
	printf("The min value is %d \n", c);
	getchar();
	return 0;
}

函数指针数组 

void function0(int x)
{
	;
}
void function1(int x)
{

}                        
void function2(int x)                                          //函数定义
{
	;
}
int main()
{
	void(*f[3])(int) = { function0, function1, function2 };  //将这3个函数指针保存在数组f中  
	return 0;
}