[c/c++] programming之路(19)、数组指针

一、指针运算

 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 }

原文地址:https://www.cnblogs.com/little-monkey/p/7436399.html