别说我没告诉过你指针匹配类型有多重要, 指针类型决定了从开始地址取多长, 如何解析
- void main()
- {
- int num = 100;
- double *p = (double*)#// 明明是整型, 我非 tm 按照 double 解析
- printf("指针 p 指向 %x, 该地址上存的值为 %f\n",p,*p);
- getchar();
- }
- unfortunately
指针的运算
p=&a 将变量 a 地址赋予指针 p
p=&a[i] 将数组元素地址赋给指针 p
p=a[10] 将数组首元素地址赋给指针 p
p1=p2 指针 p2 赋值给指针 p1
- #include<stdio.h>
- #include<stdlib.h>
- void main()
- {
- int a[10] = {0,1,2,3,4,5,6,7,8,9};
- for (int i = 0; i<10; i++)
- {
- printf("a+i=%x,&a[i]=%x\n", a + i, &a[i]);
- }
- getchar();
- }
输出结果:
不难得出, a 即代表首元素地址 a+i 意味着在首地址的基础上推进 i 个元素 a+i=&a[i]=======>*(a+i)=a[i]
所以一种很拽的写法是
- #include<stdio.h>
- #include<stdlib.h>
- void main()
- {
- int a[10] = {0,1,2,3,4,5,6,7,8,9};for (int *p = a; p < a + 10; p++)
- {
- *p = 9 - *p;
- printf("\n%d", *p);
- }
- getchar();
- }
输出结果:
来源: http://www.bubuko.com/infodetail-3306787.html