一、通过指针的方式打印数据
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;//整型的指针只能指向整型的地址
char *p2;//字符型的指针只能指向字符型的地址
int a=10;
char c='A';
p=&a;
p2=&c;
printf("a=%d\n",*p);
printf("c=%c\n",*p2);
system("pause");
return 0;
}
运行结果:
二、探讨指针++的问题
(1)打印地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;//整型的指针只能指向整型的地址
char *p2;//字符型的指针只能指向字符型的地址
int a=10;
char c='A';
p=&a;
p2=&c;
printf("a的地址打印: %p\n",p);
printf("c的地址打印: %p\n",p2);
system("pause");
return 0;
}
运行结果:
(2)当指针++的时候,打印地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;//整型的指针只能指向整型的地址
char *p2;//字符型的指针只能指向字符型的地址
int a=10;
char c='A';
p=&a;
p2=&c;
printf("a的整型地址打印: %p\n",p);
printf("a的整型地址++打印: %p\n",++p);
//先把地址往后移再打印
printf("c的字符型地址打印: %p\n",p2);
printf("c的字符型地址++打印: %p\n",++p2);
//先把地址往后移再打印
system("pause");
return 0;
}
运行结果
整型的地址在++的时候移动了4个字节
字符型的地址在++的时候移动了1个字节
(地址是连续的)
(3)通过数组打印地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[3]={1,2,3};
printf("第一个元素的地址%p\n",&array[0]);
printf("第二个元素的地址%p\n",&array[1]);
printf("第三个元素的地址%p\n",&array[2]);
system("pause");
return 0;
}
运行结果:
通过运行结果显示,整型数组的偏移值为4。
(4)通过指针访问数组(通过指针偏移的方式,访问数组)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[3]={1,2,3};
int *parray;//定义指针*parray
parray=&array[0];//指针等于数组元素的首地址
printf("第一个元素的地址%p\n",parray++);
printf("第二个元素的地址%p\n",parray++);
printf("第三个元素的地址%p\n",parray++);
//最后一个指针可以++,也可以直接写parray
//通过指针++(指针偏移)的方式来访问数组。
system("pause");
return 0;
}
运行结果:
(5)通过指针的方式,来访问数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[3]={1,2,3};
int *parray;
parray=&array[0];
/*指针指向数组元素的首地址,对数组进行偏移*/
int i;
for(i=0;i<3;i++)
{
printf(" %d ",*parray);
parray++;
}
system("pause");
return 0;
}
运行结果:
注:
指针访问数组的另一个写法
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[3]={1,2,3};
int *parray;
parray=&array[0];//指针指向数组元素的首地址
int i;
for(i=0;i<3;i++)
{
printf(" %d ",parray[i]);//遍历数组
}
system("pause");
return 0;
}
运行结果:
指针与数组知识点:
1.数组关心的是数组的首地址
2.首地址的两个表现方式:
(1)数组名=数组的首地址 (2)第一个元素的地址
3.指针是分类型的
4.指针++根据类型不同,偏移值也不同
5.指针和数组
(1)数组的首地址如何表示:
数组名,第一个元素的地址
int array[10];int *p; p=array;指针指向数组名
int array[10];int *p;p=&array[0];指针指向数组元素的首地址
(2)注意
指针偏移的位置,不要超出数组,否则会看到乱码。
——@上官可编程