-
-
[原创]深入理解C语言四-指针的运算
-
2021-7-25 16:39 4345
-
指针支持加减运算,不支持其他算术运算。对于指针p,指针的加法运算p+n,p向后移动的距离不是n个字节,而是n个指针所指数据类型的单位长度,减法运算与此类似。
指针的运算
1、是什么类型的指针参与运算
2、指针怎么运算
3、运算后得到什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | int array[ 3 ][ 4 ] = {{ 0x10 , 0x20 , 0x30 , 0x00 }, { 0x40 , 0x50 , 0x60 , 0x00 }, { 0x70 , 0x80 , 0x90 , 0x00 }}; int ( * p)[ 4 ] = array; printf( "%p\n" , p); / / p是 int [ 4 ]类型的数组指针 printf( "%p\n" , * p); / / p是 int [ 4 ]类型的数组指针, * p得到 int [ 4 ]的标志符引用, * p是 int 类型的指针常量 printf( "%0x\n" , * * p); / / * p是 int 类型的指针常量, * * p得到 int 类型指针常量的标志符引用, * * p是 int 类型 printf( "\n" ); printf( "%p\r\n" , p + 1 ); / / p是 int [ 4 ]类型的数组指针,( int )(p + sizeof( int [ 4 ]) * 1 ) printf( "%p\r\n" , (p + 1 ) + 1 ); / / (p + 1 )是 int [ 4 ]类型的数组指针,( int )((p + 1 ) + sizeof( int [ 4 ]) * 1 ) printf( "%p\n" , * (p + 1 )); / / p + 1 是 int [ 4 ]类型的数组指针, * (p + 1 )得到 int [ 4 ]的标志符引用, * (p + 1 )是 int 类型的指针常量 printf( "%p\n" , * (p + 1 ) + 1 ); / / * (p + 1 )是 int 类型的指针常量,( int )( * (p + 1 ) + sizeof( int ) * 1 ) printf( "\n" ); printf( "%p\r\n" , * p + 1 ); / / * p是 int 类型的指针常量,( int )( * p + sizeof( int ) * 1 ) printf( "%0x\n" , * ( * p + 1 )); / / * p + 1 是 int 类型的指针常量, * ( * p + 1 )得到 int 类型指针常量的标志符引用, * ( * p + 1 )是 int 类型 printf( "%0x\r\n" , * ( * p + 1 ) + 1 ); / / ( * p + 1 )是 int 类型的指针常量, * ( * p + 1 )得到 int 类型指针常量的标志符引用, * ( * p + 1 )是 int 类型 printf( "\n" ); printf( "%p\r\n" , p[ 1 ]); / / p[ 1 ] = = * (p + 1 ),p[ 1 ]是 int 类型的指针常量 printf( "%p\r\n" , p[ 1 ] + 1 ); / / p[ 1 ] + 1 = = * (p + 1 ) + 1 , * p[ 1 ] + 1 是 int 类型的指针常量 printf( "%0x\r\n" , p[ 1 ][ 1 ]); / / p[ 1 ][ 1 ] = = * ( * (p + 1 ) + 1 ),p[ 1 ][ 1 ]是 int 类型 printf( "%0x\n" , (p[ 1 ] + 1 )[ 1 ]); / / p[ 1 ] = = * (p + 1 ), * (p + 1 )是 int 类型的指针常量, / / (p[ 1 ] + 1 )[ 1 ] = = * ( * (p + 1 ) + 1 + 1 ) , * (p + 1 )是 int 类型的指针常量, * (( int )( * (p + 1 ) + sizeof( int ) * 1 + sizeof( int ) * 1 )) / / * ( * (p + 1 ) + 1 + 1 )是 int 类型,(p[ 1 ] + 1 )[ 1 ]是 int 类型 printf( "%0x\r\n" , * p[ 1 ] + 1 ); / / * p[ 1 ] + 1 = = * ( * (p + 1 )) + 1 , * (p + 1 )是 int 类型的指针常量, * ( * (p + 1 ))是 int 类型 |
github:https://github.com/0I00II000I00I0I0
bilibili:https://space.bilibili.com/284022506
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
[分享]C++基础十七-异常机制
7762
[分享]C++基础十六-模板
8114
[分享]C++基础十五-运算符重载
8157
[分享]C++基础十四-抽象类
7877
[分享]C++基础十三-多态
7608
看原图