[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\n",*(p+1));//变量没有初始化 8 printf("%x,%x\n",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\n",&a[9]-&a[3]); 13 //指针减法 14 //(0x300500+9*8-0x300500+3*8)/sizeof(double) 15 printf("%f\n",*(&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\n", *++p);//++优先于* 25 while(p++<a+5){ 26 printf("%d,%x\n",*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\n", sizeof(*p)); 8 7 //printf("%d\n", sizeof(*p++)); 8 8 //printf("%d\n", sizeof(p++)); 4 9 //printf("%f\n", *p++); 11 10 //printf("%f\n", *++p); 2 11 /*printf("%f\n", ++*p); 12 12 printf("%f\n", a[0]); 12 */ 13 14 /*printf("%f\n", (*p)++); 11 15 printf("%f\n", a[0]); 12 */ 16 17 /*printf("%f\n", ++(*p)); 12 18 printf("%f\n", 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\n", sizeof(a));//数组大小 7 int (*p)[4]=a;//用一个指向有四个元素的一维数组的指针指向a 8 printf("p=%d,*p=%d,*p+0=%d\n", 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\t", p[i][j],&p[i][j]); 19 printf("%d,%x\t",*(p[i]+j) , p[i]+j); 20 printf("%d,%x\t", *(*(p+i) + j), *(p+i) + j); 21 printf("\n"); 22 } 23 } 24 system("pause"); 25 }