指针的应用与理解代码
%p-- 指针占位符 , %x-- 16进制占位符
```C
int num1 = 8;
int num2 = 10;
int *ptr_num1 = &num1;
int *ptr_num2 = &num2;
//%p 指针占位符 %x 16进制占位符
printf("地址是:%p\t %x\n", ptr_num1,&num1 );
printf("ptr_num1指向的值为: %d\n",*ptr_num1);
printf("ptr_num2指向的值为: %d\n",*ptr_num2);
ptr_num2 = ptr_num1;
printf("ptr_num2指向的值为: %d\n",*ptr_num2);
用指针来输出数组
int i;
double score[] = {12,23,34,45,65,89,78};
double *ptr_score = score;
for( i = 0; i < 7; i++)
{
//printf("%.2lf\n",*ptr_score++); 不推荐此输出方式,因为指针加减后,会在尾部,不在首部。错误指针
printf("%.2lf\n", *(ptr_score + i));
}
用指针来访问数组
int i;
int array[] = {12,23,34,45,56,78,89} ;
int *ptr_array = array;
//赋值完毕后,用指针访问数组
for(i = 0; i < 7; i++)
{
//printf("第%d个元素的值为:%d\t地址为:%p\n", i+1, array[i], &array[i]);
printf("第%d个元素的值为:%d\t地址为:%p\n", i+1, *(ptr_array+i), ptr_array+i);
}
用指针来进行数组的逆序输出
–指向首元素的指针向后移动
–指向末元素的指针向前移动
int array[] = {12,23,34,45,56,78,89} ;
int i;
int temp;
int *ptr1 = array; //指向数组首元素的指针
int *ptr2 = array + 6;//指向数组末元素的指针
printf("正序输出:");
for(i = 0; i < 7; i++)
{
printf("%d\t",array[i]);
}
printf("\n逆序输出:");
for(i = 6; i >= 0; i--)
{
printf("%d\t",array[i]);
}
printf("\n逆序输出:");
while(ptr1 != ptr2)
{
temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
//指向首元素的指针向后移动
ptr1 ++;
//指向末元素的指针向前移动
ptr2 --;
}
for(i = 0; i < 7; i++)
{
printf("%d\t", *(array + i));
}
指针进行二维数组的输出
//score[i] 等价于 (score + i);
int i,j;
int score[5][3] = {
{12,23,34},
{45,56,67},
{78,89,90},
{21,54,85},
{12,23,34},
}; //二维数组就是由多个一维数组组成的
for(i = 0; i < 5; i++)
{
for(j = 0; j < 3; j++)
{
//printf("%d\t", score[i][j]);
//printf("%d\t", *(score[i] + j)); //score[i] 等价于 *(score + i);
printf("%d\t", *(*(score + i) + j));
}
printf("\n");
}