赞
踩
本来就对指针搞不明白,看到这些东西头都大了,救命!
要想搞清他们是什么意思,首先需要知道*和++的优先级捏
用代码直观展示一下:
- #include<stdio.h>
- int main()
- {
- int a[5] = { 1,2,3,4,5 };
- int b[5] = { 1,2,3,4,5 };
- int c[5] = { 1,2,3,4,5 };
- int d[5] = { 1,2,3,4,5 };
- int* p1 = a;
- int* p2 = b;
- int* p3 = c;
- int* p4 = d;
-
- printf("指针p1:\n");
- printf("*p1++:%d \t\n", *p1++);
- printf("a[0]:%d \t\n", a[0]);
- printf("*p1:%d \t\n", *p1);
-
- printf("指针p2:\n");
- printf("(*p2)++:%d \t\n", (*p2)++);
- printf("b[0]:%d \t\n", b[0]);
- printf("*p2:%d \t\n", *p2);
-
- printf("指针p3:\n");
- printf("*++p3:%d \t\n", *++p3);
- printf("c[0]:%d \t\n", c[0]);
- printf("*p3:%d \t\n", *p3);
-
- printf("指针p4:\n");
- printf("++(*p4):%d \r\n", ++(*p4));
- printf("d[0]:%d \t\n", d[0]);
- printf("*p4:%d \t\n", *p4);
-
- system("pause");
- return 0;
- }
结果:
分析一下,首先是指针p1:
*p1++:先取指针p1指向的值 (a[0]),为1,然后再将指针自增1 (a[1])
a[0]:数组a第一个元素 (a[0]) 的值依然为1
*p1:指针p1指向了数组a第二个元素 (a[1]),变为2
指针p2:
(*p2)++:先取指针p2指向的值 (b[0]) 为1,然后再将该值加1 (b[0]=b[0]+1),注意p++为先printf再加1,所以输出为1
b[0]:数组b第一个元素 (b[0]) 的值变为2
*p2:指针p2依然指向b第一个元素 (b[0]),但是值变为2
指针p3:
*++p3:先将指针p3自增1 (指向第二个元素),然后再取指针所指向的值 (c[1]),为2
c[0]:数组c第一个元素 (c[0]) 的值依然为1
*p3:指针p3指向了数组a第二个元素 (c[1]),变为2
指针p4:
++(*p4):先取指针p4指向的值 (d[0]),再将该值加1 (d[0]=d[0]+1),注意++p为先加1再printf,所以输出为2
d[0]:数组d第一个元素 (d[0]) 的值变为2
*p4:指针p4依然指向数组d第一个元素 (d[0]),但是值变为2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。