指针数组 订阅
在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。 [1] 展开全文
在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。 [1]
信息
主要运用
作为函数的参量
运用领域
计算机编程
本    质
“数组”
来    源
C语言和C++语言
中文名
指针数组
外文名
pointer array
指针数组含义
指针数组,就是说首先是一个数组,而数组的元素是指针,也就是说,如果数组元素都是相同类型的指针,则称这个数组为指针数组。所谓相同类型的指针是说指针所指向的对象类型是相同的。一维指针数组的定义形式为:指针数组中的每一个元素均为指针,即有诸形如“ptr_array[i]”的指针。由于数组元素均为指针,因此ptr_array[i]是指第i+1个元素的指针。 [2]  例如二维指针数组的定义为:char *ptr_array[3][3]={{"asdx","qwer","fdsfaf"},{"44444","555","6666"},{"a78x","q3er","f2f"}};
收起全文
精华内容
参与话题
问答
  • 指针 指针数组 指针数组的指针 数组指针 数组指针的数组 函数指针 函数指针数组 指向函数指针数组的指针

           指针是c语言的灵魂所在,然而因为其过于灵活,在使用的过程中难免出错。接下来我们简单分析一下常见的指针运用。

    指针:

         1  一级指针

             char *p1 =  “abcdef”;

          2  二级指针

             char **p2 = &p1;

    指针数组:

         1 char *arr[5] ;  (在数组中存放5个char* 指针)

    指针数组指针

         1 char* arr[5];

            char * (*parr)[5] = &arr;

           parr就是指向指针数组arr的指针 (即parr为指针数组的指针)

    数组指针:

         1   int   arr[5] = {1,2,3,4,5};

              int  (*p)[5] = &arr ;          p即为指向数组的指针,又称数组指针

    数组指针的数组:

          int arr1[3] = {1,2,3};

          int arr2[3] = {4,5,6};

          int (*parr[2])[3]={arr1,arr2};


    函数指针:

      先写一个简单的函数

            int add(int x, int y)

             {

                return x+y;

             }

        int  (*pfun)(int, int);

                pfun = add;

    这样一来  pfun就是指向函数add的指针(即函数add的指针)。

    下面是定义一个函数指针的方法:



    指向函数指针数组的指针:

               函数指针数组也是指针数组,在这个数组中存放的是函数的指针

        eg: 我们先写加减乘除四个子函数。

             

            int (*pfunarr[4])(int, int) = {add, sub, mul, div};//这个数组就是函数指针数组      pfunarr就是指向函数指针数组的指针

    展开全文
  • 指针数组 首先从名字就可以知道这是一个数组,是存放指针的数组。 先看几种指针数组: int * 数组指针 函数指针 函数指针数组 指向函数指针数组的指针

    指针数组

    首先从名字就可以知道这是一个数组,是存放指针的数组。
    先看几种指针数组:
    int *arr1[10];
    char *arr2[5];
    char **arr3[6];
    因为 [ ] 的优先级是高于 * 的,所以数组名会先于 [ ] 相结合组成数组。 再于 int * / char *类型结合,组成存放该类型的数组。



    指针数组因为存放的都是指针所以不管是 int *   char * 还是 char ** 其大小都是四个字节。

    数组指针

    从名字看就知道是指针,是指向一个数组的指针。

    int (*p)[10];
    char (*p)[10];
    由数组指针知道 [ ] 的优先级是高于 *  的,所以用()来提升指针先结合。

    int (*p)[10];  //  是一个指向10个整形的一维数组的指针
    char (*p)[10]; //  是一个指向10个字符型的一维数组的指针

    数组的存储方式



    因为指向的是一个数组,所以大小由数组决定


    函数指针

    指向函数的指针,通俗的说也就是函数的地址
    void(*pfun)();
    pfun 先和*结合,说明pfun是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void
    也就是说 其可以保存函数的地址



    函数指针数组

    int (*parr[3])();
    parr先与 [ ]结合,说明是一个数组,再与*结合,说明数组存放的是指针,指针都指向的是函数
    函数指针数组的使用(转移表)
    例子:计算器
    #include<stdio.h>
    
    int add( x, y)
    {
    	return x + y;
    }
    int sub(x,y)
    {
    	return x - y;
    }
    int mul(x,y)
    {
    	return x * y;
    }
    int div(x,y)
    {
    	return x / y;
    }
    int main()
    {
    	int x, y;
    	int input = 1;
    	int ret = 0;
    	int(*parr[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
    	while (input)
    	{
    		printf("*******************************\n");
    		printf("***** 1.add         2.sub *****\n");
    		printf("***** 3.mul         4.div *****\n");
    		printf("*******************************\n");
    		printf("请选择:");
    		scanf("%d", &input);
    		if ((input > 0 && input < 5))
    		{
    			printf("输入你要计算的数:\n");
    			scanf("%d  %d", &x, &y);
    			ret = (*parr[input])(x, y);
    		}
    		else
    			printf("输入有误!\n");
    		printf("%d\n", ret);
    	}
    	return 0;
    }
    输出结果:


    指向函数指针数组的指针 

    这是一个指针,指向一个数组,这个数组是一个函数指针数组,数组中的元素都是函数指针

    定义方式:

    #include<stdio.h>
    void test(const char *str)
    {
    	printf("%s\n", str);
    }
    int main()
    {
    	void (*pfun)(const char*) = test;
    	//函数指针pfun
    	void (*pfunArr[5])(const char* str);
    	//函数指针的数组pfunArr
    	void (*(*ppfunArr)[10])(const char* str) = &pfunArr;
    	//指向函数指针数组pfunArr的指针ppfunArr
    	return 0;
    }




    展开全文
  • 理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针

    一、指针数组与数组指针先看两行代码,猜猜哪个是数组,哪个是指针

    int *p[5];

    int (*p)[5];

    有没有很简单,但是有很多初学者很是分不清楚;第一个是指针数组,第二个是数组指针。且看小僧给大家捋一捋,首先要明白符号优先级问题,“[ ]”的优先级高于“*”,所以p先和谁结合就表示谁。"int *p[5]" p先和[ ]结合,理所当然是数组了,只不过数组元素为 int * 型;"int (*p)[5]" “()”的优先级高于“[ ]”,p先和“*”结合,理所当然是指针,只不过该指针指向 int 型数组的内容,是不是搜一贼。

    指针数组:首先他是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。

    数组指针:首先他是一个指针,他指向一个数组。是不是很难懂,且看下图

    希望你们看了不会太晕

    二、函数指针,函数指针数组

         函数指针,看到这里你肯定会照猫画虎,(首先他是一个指针,他指向一个函数)很对,就是这样的。接下来我们细细研究,先看张图

    来几片代码瞧一瞧

    (1) char *(*fun1)(char *p1,char *p2);(2) char * *fun2(char p1,char p2);

    有没有很复杂的样子,第一题看起来像函数,其实他是函数指针,fun1是指针变量,他指向一个函数。这个函数有两个指针类型的参数,返回值为 char * 型;第二题看起来像指针,其实他是一个函数,fun2是函数名,参数为两个指针,返回值为 char 型二级指针。 函数指针也很简单吧,其实他和普通指针一样,我们使用他的好处在于,可以将实现同一功能的多个模块统一起来标识,这样可以使函数的接口与实现分开。

    三、函数指针数组,函数指针数组指针有了上面了的基础我们很容易掌握这两个

    函数指针数组:首先它是一个数组,数组元素为函数指针。(不干说,还是来个栗子:char *(* a[4])(char *p);它是一个数组,数组名为 a ,数组内有四个指向函数的指针;这个指针指向一些返回值类型为指向字符的指针,参数为指向字符的指针的函数。)

    函数指针数组指针:首先它是一个指针,这个指针指向数组,这个数组里面存的都是指向函数的指针。(不怕,来个栗子就好了:char (*(* a)[4])(char *p); 这个指针指向包含了4个元素的数组;这个数组里面存的是指向函数的指针;这个指针指向一些返回值类型为指向字符的指针,参数为指向字符的指针的函数。

    来个例子看看他们的威力:

    #include <stdio.h>
    int add(int a, int b)
    {
    	return a + b;
    }
    int sub(int a, int b)
    {
    	return a - b;
    }
    int mul(int a, int b)
    {
    	return a*b;
    }
    int div(int a, int b)
    {
    	return a / b;
    }
    int main()
    {
    	int x, y;
    	int input = 1;
    	int ret = 0;
    	int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
    		while (input)
    		{
    			printf( "*************************\n" );
    			printf( " 1:add 2:sub \n" );
    			printf( " 3:mul 4:div \n" );
    			printf( "*************************\n" );
    			printf( "请选择:" );
    			scanf( "%d", &input);
    			if ((input <= 4 && input >= 1))
    			{
    				printf( "输入操作数:" );
    				scanf( "%d %d", &x, &y);
    				ret = (*p[input])(x, y);
    			}
    			else
    				printf( "输入有误\n" );
    			printf( "ret = %d\n", ret);
    		}
    		return 0;
    }
    这计算器还可以吧,看看运算结果如何


    四、叨叨几句,不要看起来很复杂,其实学起来也复杂,但是学懂了会很有赶脚。
    好好学习,天天向上大笑
    初学者欢迎大家指正

    展开全文
  • 指针数组指针数组到底是指针还是数组呢?指针数组是数组,是一个存放指针的数组,也就是数组元素全为指针的数组。例如,一个一维指针数组的定义:int *ptr_array[10]。数组指针知道指针数组是什么之后,那么数组指针...

    指针数组

    指针数组到底是指针还是数组呢?

    指针数组是数组,是一个存放指针的数组,也就是数组元素全为指针的数组。例如,一个一维指针数组的定义:int *ptr_array[10]。

    数组指针

    知道指针数组是什么之后,那么数组指针是什么呢?数组指针实际上他是一个指针,我们常见的整型指针:int *p 这是一个能够指向整型数据的指针,浮点型指针:float *p 这是一个能够指向浮点型数据的指针,那么数组指针就很容易理解了数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 看一个简单的数组指针 int (*p)【10】;这里p先和*进行结合,那就说明p是一个指针变量,然后指着指向的是一个大小为10个整型数据的数据,所以p是一个指针,它指向了一个数组,就是我们所说的数组指针。(这里要特别的注意一下【 】的优先级是要高于*号的,所以必须加上()来保证p和*先去结合。)

     但是这个数组指针到底有什么用处呢?在我目前看来我认为数组指针的最大用处就是来进行传参。不知道学了更多知识之后对这个有没有更深层次的见解。

    函数指针是指向函数的指针变量 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数

    #include<stdio.h>

    int max(int x,int y){return (x>y? x:y);}

    int main()

    {

        int (*ptr)(intint);

        int a, b, c;

        ptr = max;

        scanf("%d%d", &a, &b);

        c = (*ptr)(a,b);

        printf("a=%d, b=%d, max=%d", a, b, c);

        return 0;

    }

    这是一个用函数指针来调用函数的程序,就是用函数指针来代替函数名对函数进行一个调用。

    函数指针数组

    之前已经介绍过指针数组,这里的函数指针数组就很容易进行理解了,函数指针数组也是一个数组,不过这个数组中存储的就是函数的地址,那么函数指针数组我们使用的话如果进行定义呢?

    int (*parr1[10])() 在这里parr1先和【】进行一个结合,说明parr1是一个数组,那这个数组的内容是什么呢?是int(*)()类型的函数指针,那么函数指针数组的作用是什么呢?最常见的就是我们之前所编写的计算器的程序,不同的运算法则需要不同的函数来进行完成,所以,使用函数指针数组的话程序看起来相对的简单明了。

    最后一个我们介绍的就是指向函数指针数组的指针,通过名字就可以确定指向函数指针数组的指针明显就是一个指针,这个指针指向的是一个数组,这个数组中的元素都是函数指针

    Void (*pfun0(const char *)=test,这里的pfun是一个函数指针指向的就是函数test,然后定义void (*pfunarr【5】)(const char * str)这里是指向函数指针数组pfunarr,

    pfunarr【0】=test

    Void(*(*ppfunarr)[10])(const char *)=&pfunarr;

    这里指向函数指针数组pfunarr的指针ppfunarr

    这篇博客的介绍就说到这里,只是对这些定义的一个简单的概念讲解, 高级指针还有一些其他的内容我会在下次博客进行简单的介绍。

    展开全文
  • C语言指针数组介绍,定义指针数组,输入输出指针数组 1、什么是指针数组; (1)数组里面的每一个元素不是值而是值,而是指针。 (2)把很多的指针集合在一起,就是一个指针数组 2、定义一个指针数组: ***(p+1) ...
  • 开门见山,今天的主要内容是:指针数组,数组指针,函数指针,函数指针数组,函数指针数组指针。 看见题目是不是有点晕晕的感觉,没关系等看完这篇博客你会觉得他们其实也很好理解的! 接下来我一个一个介绍。 一....
  • 一、指针数组 二、数组指针 三、函数指针 四、函数指针数组 五、指向函数指针数组的指针 目录 1.指针数组 2.数组指针 3.函数指针 4.函数指针数组 5.函数指针数组的指针 一、指针数组 1.是一个...
  • C语言中,我们知道,指针变量一种特殊的变量,专门用来...指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针 1.指针数组  指针数组强调的是数组,并且数组元素是指针类型 例:int *arr[5]//ar
  • 数组:一组数据的集合称为数组,它所包含的每一个数据叫做数组元素,例如 int a[4]; 它定义了一个长度为4的整型...指针数组指针数组的元素全为指针。它的声明方法是:数据类型 * 数组名[数组长度];例如int arr[5];
  • 1、指针数组: 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。即有诸形如“ptr_array[i]”的指针。指针数组中的元素亦可以表示为“*(*...
  • 本篇主要介绍一下数组指针、指针数组、函数指针数组和指向函数指针数组的指针。希望能和大家一起学习,互相交流。(所讲内容的操作均在32位系统下进行) 指针数组:形如:int *p1[5];(p1为数组名) 首先我们要知道...
  • 指针数组 指针数组是数组每一个元素均为指针的数组,其本质为数组。数组指针数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)。函数指针...
  • 指针数组

    千次阅读 2018-07-06 21:06:26
    指针数组本质上是一个数组,指针是数组的内容,表示数组中的每个元素都是指针,因此指针数组就是存放指针的数组。 int a=10,b=20; int * p[3]; p[0]=&amp;a; p[1]=&amp;b;...
  • 指针数组:正如可以创建整型数组,也可以创建指针数组指针数组是数组,是一个存放指针的数组。请看下列例子:int *arr1[10];char **arr2[10];两个都是指针数组。数组指针:数组也是一种类型,也可以创建数组指针。...
  • 指针数组与数组指针详解

    万次阅读 多人点赞 2016-09-28 21:21:20
    指针数组与数组指针详解1.什么是指针数组和数组指针? 指针数组指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中...
  •  指针数组:首先它是一个数组,这个数组中的内容都是指针变量。如:int * parr [3] 是指一个数组中有3个元素,每个元素都是int *类型。如下图所示:   2.数组指针 数组指针:首先它是一个指针,
  • 指针数组表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针。而数组占多少个字节由数组本身决定。...
  • 详解C语言中的数组指针与指针数组

    万次阅读 多人点赞 2018-05-06 21:52:39
    ·详解数组指针与指针数组 ·数组指针 一、区分 首先我们需要了解什么是数组指针以及什么是指针数组,如下图: int *p[5]; int (*p)[5]; 数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针...
  • 指针数组、数组指针——用指针访问数组方法总结

    万次阅读 多人点赞 2019-01-14 09:51:11
    2.2.2 指向每一行的指针(指针数组方式) 2.2.3 指向整个数组的指针(数组指针方式) 3 总结 1.数组元素的访问 数组中的各元素在内存中是连续分布的,要想访问数组中某一元素,那么就必须知道其地址。 在一....
  • 今天来聊一下高级指针,首先,在我们开始聊的时候,我们先从字面上区分其类型。...现在,来讲一讲数组指针,指针数组,函数指针,函数指针数组的概念。 数组指针:指向数组的指针。 指针数组:里面存指针的数...
  • 首先我们来科普一下关于指针的小常识:指针相关概念指针数组 【int *p[4]】是数组,是一个存放指针的数组数组指针 【int (*p)[4]】是指针,该指针有能力指向一个数组函数指针 【char* (*fun)(char* p1, char* p2)】...
  • 数组指针和指针数组

    万次阅读 多人点赞 2019-09-17 16:39:06
    首先,理解一下数组指针和指针数组这两个名词: “数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了—— 数组的指针:是一个指针,什么样的指针呢?指向数组的指针。 指针的数组:是一个数组...
  • 指针函数、数组指针、函数指针、函数指针数组和指向函数指针数组的指针
  • /指针数组 示例:char *a[4] 理解:定义了一个数组,而它的每个元素的类型是一个指向字符/字符串的指针。 元素表示:char *a[i] char *(a[i])是一样的,因为[]优先级高于* 思考:是否可以这样理解 (char*)arr...
  • 指针,函数,数组组合后的概念指针数组与数组指针的理解离不开内存的概念1.指针变量是保存有指向一块内存区域的地址的变量(1.指向的区域2.指向内存区域的大小)2.数组是具有相同元素特性的内容的集合(1.数组的内容...
  • 指针数组和数组指针的概念,相信很多C程序员都会混淆。下面通过两个简单的语句来分析一下二者之间的区别,示例代码如下所示: int *p1[5]; int (*p2)[5]; 首先,对于语句“int*p1[5]”,因为“[]”的...

空空如也

1 2 3 4 5 ... 20
收藏数 86,197
精华内容 34,478
关键字:

指针数组