一、指针运算
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 void main0(){
5 int a=10;
6 int *p=&a;
7 printf("%d
",*(p+1));//变量没有初始化
8 printf("%x,%x
",p,p+1);//相隔一个元素大小
9 system("pause");
10 }
11
12 //指针的乘除法没有意义
13 //加减法就是确定数组的元素之间相隔几个元素
14 void main(){
15 int a[10];
16 /*for(int *p=a,i=0;p<a+10;p++,i++){
17 *p=i;
18 }*/
19 for (int *p = a + 9,i=9; p >= a; p--,i--)
20 {
21 *p = i;
22 }
23 system("pause");
24 }
二、指针赋值
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 void main3(){
5 //指针与整数不能直接赋值,如果需要赋值,强制类型转换
6 int *p=(int *)1234;
7 int m=(int)&p;
8 }
9
10 void main4(){
11 double a[10] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,0.0};
12 printf("%d
",&a[9]-&a[3]);
13 //指针减法
14 //(0x300500+9*8-0x300500+3*8)/sizeof(double)
15 printf("%f
",*(&a[3]+2));
16 //指针的加法
17 //0x300500+2*sizeof(double)
18 getchar();
19 }
20
21 void main(){
22 int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
23 int *p = a;
24 //printf("%d
", *++p);//++优先于*
25 while(p++<a+5){
26 printf("%d,%x
",*p,p);
27 }
28
29 getchar();
30 }
三、指针高级运算
1 #include<stdio.h>
2
3 void main(){
4 double a[10] = { 11, 2, 13, 4, 15, 6, 17, 8, 19, 0 };
5 double *p = a;
6 //printf("%d
", sizeof(*p)); 8
7 //printf("%d
", sizeof(*p++)); 8
8 //printf("%d
", sizeof(p++)); 4
9 //printf("%f
", *p++); 11
10 //printf("%f
", *++p); 2
11 /*printf("%f
", ++*p); 12
12 printf("%f
", a[0]); 12 */
13
14 /*printf("%f
", (*p)++); 11
15 printf("%f
", a[0]); 12 */
16
17 /*printf("%f
", ++(*p)); 12
18 printf("%f
", a[0]); 12 */
19
20 getchar();
21 }
四、指针与二维数组
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 void main(){
5 int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
6 printf("a=%d
", sizeof(a));//数组大小
7 int (*p)[4]=a;//用一个指向有四个元素的一维数组的指针指向a
8 printf("p=%d,*p=%d,*p+0=%d
", sizeof(p), sizeof(*p), sizeof(*p + 0));
9 //p行指针
10 //*p取出行指针内容,可以得到一行多大
11 //*p+0,列指针:在某一行,取出第0个元素的地址
12
13 for (int i = 0; i < 3; i++)
14 {
15 for (int j = 0; j < 4; j++)
16 {
17 //下面三行等价
18 printf("%d,%x ", p[i][j],&p[i][j]);
19 printf("%d,%x ",*(p[i]+j) , p[i]+j);
20 printf("%d,%x ", *(*(p+i) + j), *(p+i) + j);
21 printf("
");
22 }
23 }
24 system("pause");
25 }