数组指针 指针数组 以及 函数指针 指针函数

摘要

本文首先给出 指针相关概念 的预备知识, 即,指针的四个概念 与 相关符号 表示。而后,给出 各个 指针的 相关声明方式 。最后 ,本文给出4 个指针 相关概念的联合实例 与 输出。

预备知识

优先级关系:( )>[ ]>* ;

指针函数:是一个函数,函数的返回值是一个指针 ;

函数指针:指针,指向一个函数 ;

指针数组:是一个数组,数组中的每个元素是指针 ;

数组指针:指针,指向一个数组 ;

各指针声明方式

指针函数:

int *p( ) ;

int *func ( int num , int length )

{

// do sth ;

};

p =func( numa , length_a );

表示函数的返回只是一个整型指针;

函数指针:

int (*p)( ) ;

int *func ( int num , int length )

{

// do sth ;

};

p = &func ;

//p = func ; // 也是可行的;

int x = *p( numa , length_a );

//int x =p( numa , length_a ); // 也是可行的;

表示指针指向函数,可直接调用指针实现函数功能;

指针数组:

int *p[ 10 ] ;

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

p = arr ;

指针指向 1 个 10 维的整型数组;

【注】

执行 p+1 是错误的;

存在 p[0]、p[1]、p[2] … p[n-1] ;

存在 *p=arr ; 这里*p表示指针数组第一个元素的值 ;

数组指针:

int ( *p ) [ 10 ] ;

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

p

1*10 的数组中,每一个元素都是指针;

编程实例:

#include <iostream>int get_max(int (&arr)[3][4]){int mylength = sizeof(arr)/sizeof(int);

// 1. 这个地方既不是 &arr(当你认为 传入的是一个 3*4 的地址的时候,,它不是!), 也不是 *arr(当你认为传入的是 原来主函数中的 arr 数组的时候,它不是!),它是 arr本身,为什么呢;

// 2. 这个地方在 运行到此处时候,有如下图,数据类型的展示,逻辑上是说不过去的!

// 具体是因为 引入的是引用还是地址,最终计算的是不是不会依据 watch 来表现数据,我们都需要逐渐学习

int n = sizeof(arr[0])/sizeof(int);int m = mylength/n;int temp = arr[0][0];for ( int i = 0; i < m ; i++ )for ( int j = 0; j < n ; j++ ){if( arr[i][j] >= temp )temp = arr[i][j];}return temp;};

int *get_min(int (&arr)[3][4]){int p,q;int mylength = sizeof(arr)/sizeof(int);int n = sizeof(arr[0])/sizeof(int);int m = mylength/n;int temp = arr[0][0];for ( int i = 0; i < m ; i++ )for ( int j = 0; j < n ; j++ ){if( arr[i][j] <= temp ){temp = arr[i][j];p = i;q = j;}}return &arr[p][q];};int main(){int arr[3][4];int *p_a[3]; // pointer_arrayint (*a_p)[4]; // array_pointerfor(int i=0;i<3;i++)for (int j=0;j<4;j++){arr[i][j] = 10*(i+1)+1+2*j;p_a[i]=arr[i];}a_p = arr;// 打印 数组 指针数组 以及 数组指针std::cout<<"*********************************************"<<std::endl;std::cout<<"打印 指针数组"<<std::endl;for(i=0;i<3;i++){for(int j=0;j<4;j++)// 这里 **p_a 与 *p_a[0] 的大小是一致的std::cout<<*(p_a[i]+j)<<‘\t’;std::cout<<std::endl;}std::cout<<"*********************************************"<<std::endl;std::cout<<"打印 数组指针"<<std::endl;for(i=0;i<3;i++){for(int j=0;j<4;j++)std::cout<<(*(a_p+i))[j]<<‘\t’;std::cout<<std::endl;}int (*p_f)(int (&a)[3][4]); // pointer_func// 下面 三种 指针函数 的声明方式 都是 能够 实现的//p_f = get_max;//*p_f = get_max;// p_f = &get_max;p_f = &get_max;std::cout<<"*********************************************"<<std::endl;int maxnum = p_f(arr);std::cout<<"指针函数 成功实现 , ";std::cout<<"maxnum is "<<maxnum<<" ! ! !"<<std::endl;int *f_p = get_min(arr);std::cout<<"函数指针 成功实现 , ";std::cout<<"minnum is "<<*f_p<<" ! ! !"<<std::endl;//int *p_max; // pointer_max//p_max = f_p(arr);std::cout<<"*********************************************"<<std::endl;return 0;}

源码输出:

没有人会帮你一辈子,所以你要奋斗一生。

数组指针 指针数组 以及 函数指针 指针函数

相关文章:

你感兴趣的文章:

标签云: