|
1、先把问题摆出来 参考Demo:1#include <stdio.h> 2#include <stdlib.h>4 t2 h- k% b( {& C$ S 3* D n j# k3 E2 f9 l- }& Q 4/************************************9 J# i& _6 J. b, l. E- { 5 * Fuction: 测试demo 6 * Author :(公众号:最后一个bug) 7 ***********************************/ 8int main(int argc, char *argv[]) {7 R8 X% v2 o1 q( {( y 9 int a = 10; 10 int *ptr = &a;+ d* j2 K. Q( ]* B 11 int **ptrptr = &ptr;7 H+ Q" N2 y# A. o 12& E9 H* ~% L" f* T; L' i$ `: U6 z 13 printf(" *ptr = %d\n",*ptr); 14 printf(" **ptrptr = %d\n",**ptrptr); 15 printf("**((int **)ptr) = %d\n",**((int **)ptr)); 16 printf("欢迎关注公众号:最后一个bug\n"); ' H/ n0 r H* e. |+ \ 17 return 0; 18} 运行结果:
现象描述:
& B- f9 q) N. u% V: ^ 2、二级指针的使用 1 多级指针 其实多级指针在嵌入式程序中的应用还是相对比较少的,超过3级的bug菌仅仅只在一个特殊的索引功能里面使用过。 这里重点看看一、二级,毕竟二级指针与我们的二维数据结合使用,二维素组在图形、矩阵、算法等等方面还是使用非常广泛的。2 一级指针 指针其实广义的讲它也是一种数据类型,所以所谓的int* ptr;其中int* 就是变量ptr的类型,那么ptr就是我们常说的指针变量。Demo:1#include <stdio.h> 2#include <stdlib.h>) D* k% H' Y! X: X 3/************************************6 R. `, ^6 e: d 4 * Fuction: 测试demo 9 T7 S' {: e. @% Q! n% R 5 * Author :(公众号:最后一个bug) 2 b* F+ V$ `! z1 U, b 6 ***********************************/( _$ b& e! H8 a& |( G% v% c 7int main(int argc, char *argv[]) {) M# e5 _: _- v7 g# I2 | 8 int a = 10;+ I8 J* [3 X/ \/ Z 9 int *ptr = &a;% k0 [9 h( ^" C( s# `( f9 K$ a; |- L 10 11 printf(" a = %d\n",a); 12 printf("&ptr = 0x%X\n",&ptr);, L& }. K5 v% E 13 printf("&a = 0x%X\n",&a); 14 printf("ptr = 0x%X\n",ptr); 15 printf("*ptr = %d\n",*ptr);& u3 P# R. Q5 N! o0 C 16 17 printf("欢迎关注公众号:最后一个bug\n"); 18 return 0;! D* q/ j% \: s0 z" O 19} 运行结果:
图解:
分析一下:
3 二级指针 如果大家已经理解了一级指针,二级指针也就顺理成章了,来看看下面的小程序:Demo:1#include <stdio.h>. J+ f- S7 H/ k$ A. K6 c 2#include <stdlib.h> 3/************************************+ A% Z& W9 r$ L; ^; E 4 * Fuction: 测试demo 5 * Author :(公众号:最后一个bug) 6 ***********************************/+ Z1 }/ U$ l8 w8 c+ e 7int main(int argc, char *argv[]) {1 f+ p5 K8 N# p0 e! L: } 8 int a = 10; 9 int *ptr = &a;+ k1 H( X' t9 U' U# L8 n: b/ N 10 int **ptrptr = &ptr; 113 E; S* k8 p }0 h! D 12 printf(" a = %d\n",a); 13 14 printf("&ptrptr = 0x%X\n",&ptrptr);, ^8 I# J$ J6 v# h 15) W9 g0 Y+ e+ o9 S1 h9 B 16 printf("ptrptr = 0x%X\n",ptrptr);. R( j7 B( |- }3 w8 [3 k% C/ z 17 printf("&*ptrptr= 0x%X\n",&*ptrptr);! g+ H4 d4 D$ [% s/ y4 j, T 18 printf("&ptr = 0x%X\n",&ptr);0 S3 W+ B9 y' b7 K 19 20 printf("*ptrptr = 0x%X\n",*ptrptr); 21 printf("ptr = 0x%X\n",ptr);3 ?4 G. ?0 L9 S3 C; r% ~ 22% x3 o! `" c U4 S0 t 23 printf("*ptr = %d\n",*ptr); 24 printf("**ptrptr= %d\n",**ptrptr);8 l6 H5 u/ e. p' ^ 251 U/ z0 ~6 y6 ~; T- m# N, H 26 printf("欢迎关注公众号:最后一个bug\n"); " a K5 _: B4 G 27 return 0;2 x4 K. q! Z, Z9 C, C( ^1 d; r# j 28} 运行结果:
图解:
分析一下:
3、是时候解答前面的问题了# m! y+ V% H! { 参考Demo:1#include <stdio.h> 2#include <stdlib.h># R# B5 [1 u/ {: H) u4 | 3 4/************************************ H7 ^* c9 O9 A8 U y; v9 V 5 * Fuction: 测试demo 6 * Author :(公众号:最后一个bug) 7 ***********************************/ 8int main(int argc, char *argv[]) { 9 int a = 10; 10 int *ptr = &a; 11 int **ptrptr = &ptr; 122 H6 _: U" o! w7 z9 [; L 13 printf(" *ptr = %d\n",*ptr); 14 printf(" **ptrptr = %d\n",**ptrptr); 15 printf("**((int **)ptr) = %d\n",**((int **)ptr)); 16 printf("欢迎关注公众号:最后一个bug\n"); 3 g0 q/ Z. p, @) ]8 ` 17 return 0; 18}4 K. |$ ~. ~$ x( a3 w 分析一下:
9 x( M/ u0 x2 {% H4 c. R5 v
4、最后小结5 G: h C. a6 q0 X1 i6 d 4 O" |4 i' I$ E+ m/ L" d p 指针的理解就为大家讲解到这里了,如果你对指针还有畏惧感,那就只有一个可能,使用得太少了,多加练习自然生巧! |
微信公众号
手机版