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/原创,转载请注明