C语言最简单的指针1学习

A部分 指针在一维数组                                              整型指针      int *p  ----[  3 ]----E部分指针数组

B部分 指针在二维数组-----------XXXXXXX                 数组指针(父数组)  int  ( *parr) [ 3 ];

C部分  指针在函数 -----------G部分函数指针数组          函数指针            int  ( *Pfunc) (int,  int );

A部分

 指针的初始化 (避免野指针)                              int a =10;                                                                   int *p =&a;                                                               指针的解引用操作(找到对应的整型数据,找到对应的二维数组,调用对应的函数)                指针版                                                                   printf("a的数值是%d,a的内存地址ID是%p",   *p,  p);                                                                        原版                                                                         printf("a的数值是%d,a的内存地址ID是%p", a,  &a);

B部分 

7ecda9c33a774571a4018e1593a43aad.jpg                                                                               数组指针 parr是个指针,控制权限大小是4

arr[   ][ 4 ] ={       {4,6,7,9      } ,                                                            { 2,47,60,7 }  ,                                                           {66,90,5,30 }                                                       };                                                            int  ( *parr)[ 4  ] =arr;                                                 指针版                                                                       printf(" 二维数组中第i行第j列的数据是%d,该数据的地址是%p,  *( *(arr+i-1) + j ) ,                  *(arr+i-1) + j    ");                                                     原版                                                                           printf(" 二维数组中第i行第j列的数据是%d,该数据的地址是%p,  arr[ i-1 ][j-1 ]  ,                   & arr[ i-1 ][j-1 ]  ) ;

C部分

1.函数的功能优先思想                                               直接使用函数的功能性,随后再考虑函数如何实现,即先根据需求调用函数,在想办法把函数实现。                                                               2.函数传参的思想                                                   a.传递数值。即已经在main中开辟空间,并赋值了,只是涉及在函数1中表层数据的处理,不会改变main中的内存数据。                               int a =10  ;                                                                 int b =20  ;                                                                int Add(int ,int )                                                   ret = Add(a,b)                                                   main中开辟的A空间已赋值,传递的是数值。不会涉及到修改A的内存数据。                            b.传递地址。只在main函数中开辟了空间,A空间中并未赋值,调用函数1(传递给他mainA对应地址)实现对main中开辟的空间的赋值;当传递是数组名时,直接对数组赋值,遍历,改值等操作。直接修改main中对应的空间内存数据                                                                           3.调用函数二种方法                                               直接法,  函数名调用                                             间接法,函数指针去调用      

                                                                                4.回调函数的思想。                                               int( *Pfunc)(int ,int);    $ 定义函数指针变量        int cmd;                                                                    scanf("%d",&cmd);                                                  switch(cmd){

case 1:  Pfunc =GetMax;    $$$$ 初始化 指针                                                 break;                     case 2:Pfunc = GetMin;                                                       break;

}

int DataHandler( int data1,int data2 , int (*Pfunc)( int,int  )    )

{                   用函数指针,调用函数

    return   (*Pfunc) (data1,data1)

}                                                                                   

函数指针   int ( *Pfunc)(  int ,int data2     )                        *(Pfunc)(20, 30  )

 

 

 

 

E部分 

指针数组    int *p[  3  ]     p是个数组,每个数组元素是地址类型。

int a=10;                                                                   int b=15;                                                                   int c =20;                                                                 int *p[  3  ] ={  &a,&b,&c };                                   primtf( "数据的地址是 %p,该地址下对应的数据是 %d  " ,  p ,   *p       ) ;      

F部分                                                                         函数指针数组    int (  *Pfunc[ 3  ] ) ( int,int  )={

GetMax,Getmin,GetMul};                                        注意与回调函数区别(函数指针)                        for(int i =0;i<3;i++){

 *Pfunc[ i ](39,20)

}

 

最后优先级

p先与小括号   再与中括号  最后与解引用的优先顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值