- 通过指针遍历数组的小把戏
#include<stdio.h> #include<stdlib.h> #include<Windows.h> void main() { int a[10] = {1,2,3,4,5,6,7,8,9,10}; for (int *p = a; p <= a + 9; p++) { printf("值是%d,地址是%p ",*p,p); } getchar(); }
- a代表指向整型数组首元素地址的指针,被称作指向整型类型的常量指针,原因见下属上机实验结果,而p相对而言就是变量指针,可以把数组a[10]的首地址a赋值给p
左值,处于赋值号左边可以被赋值的变量,实验结果是提示左值不可赋值
- 也可以巧妙安排借助指针改变地址中存放的值
void main() { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; time_t st; srand((unsigned int)time(&st)); //利用指针替换数组a int *p = a; for (int i = 0; i < 10; i++) { *p = rand()%100;//指针当前位置的元素改为以时间为种子生成的随机数 p++;//指针向前推进,遍历到数组的下一个元素 } for (int *p = a; p < a + 10;p++) { printf("当前元素是%d,地址是:%p ",*p,p); } system("pause"); }
输出结果:
- 也可以利用指针运算性质,不断的推进地址,达到访问地址中存放的值的效果
void main() { time_t ts;//声明了一个时间 int a[10] = {1,2,3,4,5,6,7,8,9,10}; srand((unsigned int)time(&ts));//以时间为种子生成随机数,如果省略此行代码,则下一行代码生成的总是一个数 printf("此刻,生成的随机数是%d ", rand() % 100);//生成0-99----对100取余,肯定数字小于100 int i = 0; int num[10]; for (int *p = num; p < num + 10;p++) { num[i] = rand() % 100; i++; } int *q = num;//这里用到了num是数组首元素地址的特性q+i=&num[i] *(q+i)=num[i] for (int i = 0; i < 10; i++) { printf("q[i]=%d, *(q+i)=%d ",q[i],*(q+i)); } getchar(); }
- 求随机数组的最大值及其下标
#include<stdio.h> #include<stdlib.h> #include<time.h> void main() { time_t st; srand((unsigned int)time(&st)); int crazyarray[10]; for (int i = 0; i < 10; i++) { crazyarray[i] = rand() % 100; } int *p = crazyarray; int max = *p; int index = 0; for (int *q = crazyarray; q < crazyarray + 10; q++) { printf("%d ", *q); if (*q>max) { max = *q; index= q - p; } } printf("最大值是%d,下标是%d ",max,index); getchar(); }
输出结果: