C语言第十三回合:再谈指针

C语言第十二回合:再谈指针

 

【学习目标】

1.        指针数组

2.        数组指针

3.        函数指针

 

 

( 1 )指针数组

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

决定。它是“储存指针的数组”的简称

   如:

定义数组名为ptr,其中包含10个指向int类型的数据的指针

int *ptr[ 10];  //指针数组,int*修饰数组的内容

 

[程序]

#include <stdio.h>
 
void print_error( int n );
 
int main( void )
{
         inti;
        
         for(i= 0; i< 4; i++ )
         {
                   print_error(i );
         }
        
         putchar(10 ); //printf("\n" );
        
   return 0; 
}
 
void print_error( int i )
{
         //定义包含4个指向int类型的数据指针的数组
         char*error[]= { 
                          "cann`t openfile\n",
                                                "read error\n",
                                                "write error\n",
                                                "media failure\n"
                        };
                       
   printf( "%s", error[ i ] );
        
         return;
}
 

( 2 )数组指针

   数组指针:首先它是一个指针,它指向一个数组。在 3 2 位系统下永远是占 4 个字节,

至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。

格式:类型 ( *标识符 )[ ] 

// int ( *p )[ 5 ];

 

#include <stdio.h>
 
void print( char ( *ptr )[ 10 ], int n ) //数组指针作为参数
{
         inti;
        
         for(i= 0; i< n; i++ )
         {
                   printf("%s\n", *( ptr+ i ) );
         }
        
         return;
}
int main( void )
{
         charname[ 3 ][ 10 ]= {
                                  "zhangsan",
                                                                            "lisi",
                                                                           "wangwu" 
                               };
         print(name, 3 );  //打印
        
   return 0; 
}

( 3 )函数指针

   函数指针:就是指向函数的指针。

   格式:类型 ( * 标识符 )( );

[程序 ]

#include <stdio.h>
 
//使用指针参数
//功能:两个数交换
void swap( int *a, int *b );
 
int main( void )
{
  int n= 10;
  int m= 20;
   //第一指针函数,返回类型void,f为函数指针
  void ( *f )(); 
  
   f=swap; //f指向swap。注意:类型必须匹配
  
  printf( "交换前:n= %d m=%d\n", n, m );
  
  if( n< m ) //如果n< m,就交换
   {
        f(&n, &m );
   }
  
  printf( "交换后:n= %d m= %d\n", n, m );
        
  return 0;   
}
 
void swap( int *a, int *b )
{
         inttemp;
        
         temp=*a;
         *a=*b;
         *b=temp;
        
   return ;   
}


运行结果:

交换前:n=10 m= 20

交换后:n=20 m= 10

 


【指尖的微笑】错误在所难免,希望得到大家的指正^-^

http://13kv.com/原创,转载请注明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值