前方一大波指针正在赶来~
2016-05-30 13:34
239 查看
我们知道,通常我们来访问数组元素和指针变量的时候都可以通过下标和偏移两种方式来访问,那么他们有什么不一样的地方呢?
我们来看一个小栗子:
[code=cpp;toolbar:false">int main ( )
{
int a [5] = { 1, 2 , 3, 4, 5 };
int *ptr = (int *)(& a + 1 );
printf( "%d %d\n" ,*(a+ 1),*(ptr -1));
system("pause" );
return 0 ;
}int main ( )
{
int a [5][ 5];
int( *p )[4];
p = (int (*)[4]) a;
printf( "%p ,%d\n" , &p[ 4][2 ] - &a[ 4][2 ], &p[ 4][2 ] - &a[ 4][2 ] );
system("pause" );
return 0 ;
}int fun ( int * p )
int main( )
{
int arr [3][ 4];
fun( &arr [0][ 0] );
}2.将指针指向整个内层一维数组传参int fun ( int( * p )[4 ] )
int main( )
{
int arr [3][ 4];
fun( arr );
}##在函数内部不能使用sizeof 来求数组的大小,所以必须传参获得数组的大小
void getmemory ( char ** st )
{
* st = (char *)malloc( 20 * sizepf( char ) );
if (*st == NULL)
{
printf( "Out of memory!\n" );
exit( EXIT_FAILUR )
}
}
int main ( )
{
char *str = NULL;
getmemory( &str );
return 0 ;
}char *getmemory ( )
{
static char arr[ 10];
return arr ;
}
int main ( )
{
char *str ;
str = get memory( );
strcpy( str, "abc" );
return 0 ;
}int add ( int a, int b )
{
return a + b;
}
int sub ( int a, int b )
{
return a - b;
}
int operation ( int( * pfun )(int , int) )
{
int num1 = 0;
int num2 = 0;
scanf( num1 , num2 );
return pfun ( num1, num2 );
}
int main ( )
{
int ret operation( add );
printf( "%d\n" , ret );
system( "pause" );
return 0 ;
}
我们来看一个小栗子:
[code=cpp;toolbar:false">int main ( )
{
int a [5] = { 1, 2 , 3, 4, 5 };
int *ptr = (int *)(& a + 1 );
printf( "%d %d\n" ,*(a+ 1),*(ptr -1));
system("pause" );
return 0 ;
}int main ( )
{
int a [5][ 5];
int( *p )[4];
p = (int (*)[4]) a;
printf( "%p ,%d\n" , &p[ 4][2 ] - &a[ 4][2 ], &p[ 4][2 ] - &a[ 4][2 ] );
system("pause" );
return 0 ;
}int fun ( int * p )
int main( )
{
int arr [3][ 4];
fun( &arr [0][ 0] );
}2.将指针指向整个内层一维数组传参int fun ( int( * p )[4 ] )
int main( )
{
int arr [3][ 4];
fun( arr );
}##在函数内部不能使用sizeof 来求数组的大小,所以必须传参获得数组的大小
void getmemory ( char ** st )
{
* st = (char *)malloc( 20 * sizepf( char ) );
if (*st == NULL)
{
printf( "Out of memory!\n" );
exit( EXIT_FAILUR )
}
}
int main ( )
{
char *str = NULL;
getmemory( &str );
return 0 ;
}char *getmemory ( )
{
static char arr[ 10];
return arr ;
}
int main ( )
{
char *str ;
str = get memory( );
strcpy( str, "abc" );
return 0 ;
}int add ( int a, int b )
{
return a + b;
}
int sub ( int a, int b )
{
return a - b;
}
int operation ( int( * pfun )(int , int) )
{
int num1 = 0;
int num2 = 0;
scanf( num1 , num2 );
return pfun ( num1, num2 );
}
int main ( )
{
int ret operation( add );
printf( "%d\n" , ret );
system( "pause" );
return 0 ;
}
相关文章推荐
- 数组与指针(一)
- 优化的冒泡排序的实现
- C专家编程读书笔记——time_t知识链接
- 程序的环境
- swift基础之协议
- 浮点数在内存中的存储(简述)
- 关于#define你知道多少?
- 计算机的大端模式和小端模式
- android6.0中全屏处理(禁止通知栏下滑)
- 看似简单的if语句
- 神奇的位操作符
- Java - PAT - 1022. D进制的A+B (20)
- CDH5 Hadoop集群完全离线安装步骤总结
- 这7件事情是影响程序员效率的关键
- JavaScript的万年历插件
- 如何使用 vimdiff 来 git diff /svn diff
- [swift学习之十四]计算属性和存储属性
- 微信支付之JSAPI公众号支付
- 解决get方法传递URL参数中文乱码问题
- WebService之CXF框架