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

时间:2023-03-10 06:10:20
[c/c++] programming之路(19)、数组指针

一、指针运算

 #include<stdio.h>
#include<stdlib.h> void main0(){
int a=;
int *p=&a;
printf("%d\n",*(p+));//变量没有初始化
printf("%x,%x\n",p,p+);//相隔一个元素大小
system("pause");
} //指针的乘除法没有意义
//加减法就是确定数组的元素之间相隔几个元素
void main(){
int a[];
/*for(int *p=a,i=0;p<a+10;p++,i++){
*p=i;
}*/
for (int *p = a + ,i=; p >= a; p--,i--)
{
*p = i;
}
system("pause");
}

二、指针赋值

 #include<stdio.h>
#include<stdlib.h> void main3(){
//指针与整数不能直接赋值,如果需要赋值,强制类型转换
int *p=(int *);
int m=(int)&p;
} void main4(){
double a[] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,0.0};
printf("%d\n",&a[]-&a[]);
//指针减法
//(0x300500+9*8-0x300500+3*8)/sizeof(double)
printf("%f\n",*(&a[]+));
//指针的加法
//0x300500+2*sizeof(double)
getchar();
} void main(){
int a[] = { , , , , , , , , , };
int *p = a;
//printf("%d\n", *++p);//++优先于*
while(p++<a+){
printf("%d,%x\n",*p,p);
} getchar();
}

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

三、指针高级运算

 #include<stdio.h>

 void main(){
double a[] = { , , , , , , , , , };
double *p = a;
//printf("%d\n", sizeof(*p)); 8
//printf("%d\n", sizeof(*p++)); 8
//printf("%d\n", sizeof(p++)); 4
//printf("%f\n", *p++); 11
//printf("%f\n", *++p); 2
/*printf("%f\n", ++*p); 12
printf("%f\n", a[0]); 12 */ /*printf("%f\n", (*p)++); 11
printf("%f\n", a[0]); 12 */ /*printf("%f\n", ++(*p)); 12
printf("%f\n", a[0]); 12 */ getchar();
}

四、指针与二维数组

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

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

 #include<stdio.h>
#include<stdlib.h> void main(){
int a[][] = { ,,,,,,,,,,, };
printf("a=%d\n", sizeof(a));//数组大小
int (*p)[]=a;//用一个指向有四个元素的一维数组的指针指向a
printf("p=%d,*p=%d,*p+0=%d\n", sizeof(p), sizeof(*p), sizeof(*p + ));
//p行指针
//*p取出行指针内容,可以得到一行多大
//*p+0,列指针:在某一行,取出第0个元素的地址 for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
//下面三行等价
printf("%d,%x\t", p[i][j],&p[i][j]);
printf("%d,%x\t",*(p[i]+j) , p[i]+j);
printf("%d,%x\t", *(*(p+i) + j), *(p+i) + j);
printf("\n");
}
}
system("pause");
}

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