C语言基础:指针

示例代码:

输入一个数,存放到指针p所指定的内存地址中

  1.     int a,*p;
  2.     p=&a;
  3.     printf("Please enter a number:\n",*p);
  4.     scanf("%d",p);
  5.     printf("*p=%d\n",*p);

使用指针操作数组

  1.     int m[5],i,*pm;
  2.     pm=m;                             //m的地址赋值给指针pm
  3.     for(i=0;i<5;i++){
  4.         *pm=i;                         //给指针赋值
  5.         pm++;                        //下一个地址
  6.     }
  7.     pm=m;
  8.     for(i=0;i<5;i++){
  9.         printf("m[%d]=%d\n",i,*pm);          //输出pm的值
  10.         pm++;
  11.     }
  12. -------------------------------------------------------------------------------------------------------
  13.     int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
  14.     printf("%d %d %d %d %d\n",m,*m,m[0],&m[0],&m[0][0]);     
  15.     //m,m[0],&m[0],&m[0][0],*m指的都是m的地址 0的地址
  16.     printf("%d %d %d %d %d\n",m+1,*(m+1),m[1],&m[1],&m[1][0]);
  17.     // m+1,*(m+1),m[1],&m[1],&m[1][0] 指的是第一行元素的地址4的地址
  18.     printf("%d %d %d %d %d\n",m+2,*(m+2),m[2],&m[2],&m[2][0]);
  19.     //m+2,*(m+2),m[2],&m[2],&m[2][0]指的是第二行元素的地址8的地址
  20.     printf("%d %d\n",m[1]+1,*(m+1)+1);                                             
  21.     //m[1]+1,*(m+1)+1,指的是第一行第一个元素的地址  5的地址 
  22.     printf("%d %d\n",*(m[1]+1),*(*(m+1)+1));                                     
  23.     //*(m[1]+1),*(*(m+1)+1) 指的是第一行第一个元素的值5
  24. ---------------------------------------------------------------------------------------------
  25.     static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
  26.     int (*p)[4];
  27.     int i,j;
  28.     p=m;
  29.     for(i=0;i<3;i++)
  30.         for(j=0;j<4;j++)
  31.             printf("%3d ",*(*(p+i)+j));
  32. -------------------------------------------------------------------------------------------------
  33. int *max(int a,int b){              //指针函数:求最大值   返回最大值的地址
  34.     int *p;
  35.     if(a>b) p=&a;
  36.     else   p=&b;
  37.     return p;
  38. }
  39. main(){
  40.     printf("max=%d",*max(12,56));          //调用指针函数
  41. }
  42. ---------------------------------------------------------------------------------------------------------
  43. int min(int a,int b){                  
  44.     if(a<b) return a;
  45.     else return b;
  46. }
  47. main(){
  48.     int (*pmin)();                   //函数指针变量:存放一个函数的地址,函数名就代表函数的地址
  49.     int x,y,z;
  50.     pmin=min;                     //min()函数的地址赋值给函数指针变量
  51.     printf("Please input two numbers:\n");
  52.     scanf("%d %d",&x,&y);
  53.     z=(*pmin)(x,y);              //用指针变量调用min()函数
  54.     printf("min_number=%d",z);
  55. }
  56. --------------------------------------------------------------------------------------------------------------
  57.     int m[3][3]={1,2,3,4,5,6,7,8,9};                 
  58.     int *pm[3]={m[0],m[1],m[2]};            //指针数组:数组的元素都是指针变量
  59.     int *p=m[0];
  60.  
  61. main(){    
  62.     int i;
  63.     for(i=0;i<3;i++)
  64.         printf("%d %d %d\n",m[i][2-i],*m[i],*(*(m+i)+i));
  65.     for(i=0;i<3;i++)
  66.         printf("%d %d %d\n",*pm[i],p[i],*(p+i));
  67. }
  68. -------------------------------------------------------------------------------------------------------------
  69.     static int a[3][4];
  70.     static int *p[3],**pp;            // 二级指针:指向一级指针的地址
  71.                                                 //*p[3],一级指针,**pp指向*p的地址
  72.     int i,j;
  73.     p[0]=a[0];
  74.     p[1]=a[1];
  75.     p[2]=a[2];
  76.     p[3]=a[3];
  77.     pp=p;
  78.     printf("please enter the number of a[3][4]:\n");
  79.     for(i=0;i<3;i++)
  80.         for(j=0;j<4;j++) scanf("%d",pp[i]+j);
  81.     for(i=0;i<3;i++){
  82.         for(j=0;j<4;j++) printf("%5d",*(*(pp+i)+j));
  83.         printf("\n");
  84.     }

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值