c 语言指针练习<二>

来源:互联网 发布:百度seo 编辑:程序博客网 时间:2024/05/03 07:11
# include <stdio.h>/*1.如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。注意:执行p+1时并不是将p的值(地址)简单的加1,而是加一个数组元素所占的字节数。p+1所代表的地址实际上是p+1*d,d指的是数组元素所占的字节数。2.如果p原来指向的a[0](数组),执行++p后p的值改变了,在p的原值基础上加d,这样p就指向数组的下一个元素a[1];3.如果p的初始值为&a[0],则p+i和a+1就是数组元素a[i]的地址,或者说,它们指向a数组的第i个元素;4.*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。*(p+i)==*(a+5)==a[5];5.如果指针变量p1,p2都指向同一数组,如执行p2-p1,结果是两个地址之差除以数组元素的长度(数组类型占的字节数int占4个字节);输出结果:测试指针对数值的操作:1,2,3,4,5,6,7,8,9,01,2,3,4,5,6,7,8,9,0,--------------------------------------1,2,3,4,5,6,7,8,9,01,2,3,4,5,6,7,8,9,0,--------------------------------------1,2,3,4,5,6,7,8,9,01,2,3,4,5,6,7,8,9,0,--------------------------------------Press any key to continue*/void pointerArray1(){int a[10];int i;for(i=0;i<10;i++)scanf("%d,",&a[i]);for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");    printf("--------------------------------------\n");}void pointerArray2(){int b[10];int j=0;for(;j<10;j++)scanf("%d,",&b[j]);for(j=0;j<10;j++)printf("%d,",*(b+j));    printf("\n");printf("--------------------------------------\n");}void pointerArray3(){int c[10];int *p;int k;for(k=0;k<10;k++)scanf("%d,",&c[k]);for(p=c;p<(c+10);p++)printf("%d,",*p);    printf("\n");printf("--------------------------------------\n");   // for(p=a;a<(p+10);a++)这样写是不行的,因为a代表的是数组的首元素的地址,它是指针常量,它的值在运行过程中是固定不变的。a++无法实现。//printf("%d",*a);}void pointerArray4(){int d[10];int *p;int i;p=d;for(i=0;i<10;i++)scanf("%d,",p++);p=d;//这里的p=d如果去掉,后面的输出就是地址码,因为指针已经超过了数组的长度。//注意:在C语言中不报下标越界依然可以执行。在使用时尽量使用有效元素。for(i=0;i<10;i++)printf("%d,",*p++);printf("\n");printf("--------------------------------------\n");}void pointerArray5(){//1.分析p++;*p; 如果p=a; p++使p指向下一个元素a[1]。然后若再执行*p,则得到下一个元素a[1]的值。//2.分析*p++。由于++和*具有相同的优先级,结合方向为自右而左,因此它等价于*(p++)。作用是先引用p的值,实现*p的运算,然后再使p自增1;//3.分析*(p++)与*(++p);前者是先取*p然后p加1,后者是先使p+1再取*p;//4.分析(*p)++表示p所指向的元素值加1,如果p=a,则相当于a[0]++,若a[0]=3,则值等于4。注意:是元素值加1,而不是指针加1.//5.分析如果p当前指向a数组中第i个元素,则:*(p--)相当于a[i--],先对p进行"*"运算,再使p自减。//6.分析如果p当前指向a数组中第i个元素,则:*(++p)相当于a[++i],先对p自加,再作*运算。//7.分析如果p当前指向a数组中第i个元素,则:*(--p)相当于a[--i],先对p自减,再做"*"运算。    /*输出数组的100个元素:p=a;while(p<a+100)  printf("%d",*p++);orwhile(p<a+100) { printf("%d",*p++);p++}*/}void main(){printf("测试指针对数值的操作:\n");//pointerArray1();//pointerArray2();//pointerArray3();pointerArray4();}