指针数组和二级指针

 #include<stdio.h>

 int main(){
         ] = {,,,,};
         ], i;
         int **pp = p;
     //使p指针数组指向每一个a
          ; i <  ; i++){
                 p[i] =&a[i];
         }
     //【】优先级高于* ,*(p[i]) p[i] = &a[i],so==> *p[i] = *&a[i] = a[i]
          ; i <  ; i++){
                 printf("%d ",*p[i]);
         }
         printf("\n");
     //p 和 pp都是二级指针,i=0时,*pp=p[0] ,p[0]=&a[i],*pp=a[0].
     //执行pp++之后,pp指向p[1],*pp=p[1],p[1]=&a[1].
          ; i <  ; i++,pp++){
                 printf("%d ",**pp);
         }

          ;
 }
 output:

指针与数组的 关系

 nclude<stdio.h>

 int main(){
         ][] = {,,,,,,,,,};
         //表示p是一个指针,指向含有五个元素的一维数组
         ],i;
         //p指向二维数组得第一行
         p = a ;
     //p=a 之后 , p=&a , *p = a[1].
     //p是一个数组指针
          ; i <  ; i++){
                 printf("%d ",(*p)[i]);
         //(*p)[i] 是先取p的内容作为数组的起始地址,然后再去第i个元素。
         //*p[i]是先取以p为起始地址的第i个元素,该元素为指针,然后取该指针的内容。
         }
         printf("\n");
     //p移动到第二行
         p++;
          ; i <  ; i++){
                 printf("%d ",(*p)[i]);
         }
         printf("\n");

         ;
 }

 ] ;//一个指针
 ]  ; //含有五个元素的数组,长度为5,数组中得每一个元素指向一个整型变量。

函数和指针
1.指针作为函数得参数
作用是将一个变量的地址传送到一个函数中

 #include<stdio.h>
 void change(int i , int *p){
         i++;
         if(p != NULL){
                 (*p)++;//根据地址找到变量b,b+1
         }
 }
 int main(){
          , b =  ;
         change(a,&b);
         printf("a=%d,b=%d",a,b);
         ;
 }

2.返回指针得函数
  int *f(int i , int j); 
() 的优先级高于 *
表示 f是一个函数,函数名前有一个指针,表示此函数得返回值类型为指针。

 include<stdio.h>
 //定义一个名称为name得指针数组,每个数组元素都指向一个字符串
 ] = {"monday","tuesday","wednessday","thursday","friday","saturday","sunday"};
 //定义一个指针,这个指针指向一个字符串
 char *message = "wrong input";
 //返回指针的函数
 char *week(int day){
          || day > ){
                 return message ;
         }else{
                 ] ;
         }
 }

 int main(){
         int day ;
         char *p;

         printf("input a number of a week:\n");
         scanf("%d",&day);

         p = week(day);
         printf("%s\n",p);

         ;
 }

3.指向函数的指针:

 #include<stdio.h>

 #define GET_MAX 0
 #define GET_MIN 1

 int get_max(int i , int j){
         return i > j ? i : j ;
 }

 int get_min(int i , int j){
         return i < j ? i : j ;
 }

 int compare(int i , int j , int flag){
         int ret ;
         //声明指向函数的指针
         int (*p)(int ,int);

         if(flag == GET_MAX){
                 p = get_max;//函数名
         }else{
                 p = get_min;
         }

         ret  = p(i , j );
         return ret ;
 }

 int main(){
          , j =  , ret ;
         ret = compare(i , j , GET_MAX);
         printf("max = %d\n",ret);

         ret = compare(i, j , GET_MIN);
         printf("min = %d\n",ret);

 }

不能对指向函数的指针做任何运算。

 int *f(int i , int j);//返回指针的函数
 int (*p)(int i , int j);//指向函数的指针

4.函数指针做形参
函数的参数可以是指针,淡然也可以是指向函数的指针

int get_max(int i , int j,int k , (*p)(int ,int));

该函数接收4个参数,函数内通过指针调用其他函数,信号处理会使用这种技术。
eg:

 #include<stdio.h>

 int get_big(int i , int j){
         return i > j ? i : j ;
 }
 //get_max函数里有个指向函数的指针做参数
 int get_max(int i ,int j ,int k ,int  (*p)(int ,int)){
         int ret ;

         ret = p(i , j );
         ret = p(ret , k);
         return ret ;
 }

 int main(){
          , j =  , k =  , ret ;
         ret = get_max(i , j , k , get_big);
         printf("max = %d",ret);
         ;
 }

5.返回函数指针的函数
eg:

 #include<stdio.h>

 int get_big(int i , int j){
         return i > j ? i : j ;
 }
 //()优先级高于* , get_function先和()结合,成为一个函数,他的返回值是一个指向函数的指针 int (*)(int ,int)
 int (*get_function(int a))(int ,int ){
         printf("the number is %d",a);
         return get_big;
 }

 int main(){
          , j =  , max ;
         int (*p)(int ,int);
         p = get_function();

         max = p(i , j );
         printf("max number is %d",max);
         ;
 }

数组名始终指向该数组的第一个元素,不允许做a++运算,新申明的指针则可以随意移动

Linux C 程序 指针数组和二级指针(TEN)的更多相关文章

  1. C++指针数组,二级指针和函数指针的练习

    1.编一程序,将字符串“Hello,C++!”赋给一个字符数组, 然后从第一个字母开始间隔地输出该串(请用指针完成). 代码如下 #include<iostream> #include&l ...

  2. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

  3. C++中的指针、数组指针与指针数组、函数指针与指针函数

    C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从刚開始学习的人的角度,深入浅出地具体解释什么是指针.怎样使用指针.怎样定义指针.怎样定义数组指针和函数指针.并给出相应的实例演示.接着,差 ...

  4. 《挑战30天C++入门极限》C/C++中字符指针数组及指向指针的指针的含义

        C/C++中字符指针数组及指向指针的指针的含义 就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针. 先看下面的代码,注意看 ...

  5. OpenCV二维Mat数组(二级指针)在CUDA中的使用

    CUDA用于并行计算非常方便,但是GPU与CPU之间的交互,比如传递参数等相对麻烦一些.在写CUDA核函数的时候形参往往会有很多个,动辄达到10-20个,如果能够在CPU中提前把数据组织好,比如使用二 ...

  6. C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)

    前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...

  7. 二维数组是二级指针pointer to pointer!

    二维数组居然是个类似于二级指针(pointer to pointer)的东西,十分震惊! #include <stdio.h> int main() { ][]={{,,,},{,,,}, ...

  8. C++指针数组和指向指针的指针

    指针数组 定义: 如果一个 数组,其元素均为指针型数据,该数组为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址. 形式: 一维指针数组的定义形式为: int[类型名] * ...

  9. C++数组指针、指针数组、函数指针的核心概念

    1.什么叫数组指针? 数组指针:一个指向一维或者多维数组的指针. 比如:int * b=new int[10];指向一维数组的指针b ; 注意,这个时候释放空间一定要delete [] ,否则会造成内 ...

随机推荐

  1. 最简单的视频编码器:编译(libx264,libx265,libvpx)

    ===================================================== 最简单的视频编码器系列文章列表: 最简单的视频编码器:编译 最简单的视频编码器:基于libx ...

  2. iOS开发——高级UI&带你玩转UITableView

    带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实 ...

  3. SAP BW 平面文件创建信息立方体

    T-CODE:RSA1 1.创建信息范围 2.创建信息范围 创建特性信息对象目录 创建关键指标信息对象目录 3.创建特性信息对象 依次创建客户,销售组织 4.创建关键指标 依次创建单价和金额 5.创建 ...

  4. MySQL Troubleshoting:Waiting on query cache mutex 腾讯数据库工程师:幕南风

    http://blog.itpub.net/26515977/viewspace-1208188/           今天被MySQL Query Cache 炕了.线上大量 Waiting on ...

  5. objective-c对NSArray的学习

    转自:http://gekie.iteye.com/blog/1086256 NSARRAY简单的使用 定义数组,遍历数组: 1 2 3 4 5 6 7 8 NSArray *array; array ...

  6. 高级I/O之STREAMS

    http://en.wikipedia.org/wiki/STREAMS STREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统 ...

  7. jetty-distribution-7.6.x 部署

    (1)启动 jetty 命令:java - jar start.jar 需要注意2个事项:必须使用JDK来运行jetty:启动是需要读取 start.ini 的配置信息. (2)第一个注意事项只要保证 ...

  8. Java计算文件的SHA码和MD5码

    可参考:http://blog.csdn.net/hudashi/article/details/8394158 /** * 计算文件的MD5码 * @param file * @return */ ...

  9. Xcode磁盘空间大清理(转)

    Xcode磁盘空间大清理 我的设备是Macbook Air 13’ Mid 2011,128G SSD.最近开始有些存储压力了,用Clean My Mac清理一部分旧文件后,决定对Xcode动手. 移 ...

  10. Junit,hamcrest和Eclemma安装及使用

    Junit和hamcrest下载及安装 下载地址 Junit      http://download.csdn.net/detail/luzle/6915487 Hamcrest  http://d ...