1、C语言指针
参考文档:C语言指针
2、指针求最大值和最小值
用指针求含有十个元素的数组最大值和最小值,代码如下,
#include<stdio.h> int main() { int a[10]={13,2,4,5,11,32,9,8,7,10}; int max, min,inx,i; max = min = a[0]; //假设第1个元素即是最大值也是最小值。 int *p = a; //遍历数组,找出数组a中的最大数和最小数 for (inx=0; inx!=sizeof(a) / sizeof(int); ++inx) { if (*(p+inx) > max) max = *(p + inx); else if (*(p+inx) < min) min = *(p+inx); } printf("%d %d", max, min); return 0; }
3、使用指针实现数组遍历
通过使用指针的运算来实现数组的遍历,及相关条件的判断。可以使用指针代替数组,因为变量指针可以递增或递减,
1)指针自增
#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指针中的数组地址 */ ptr = var; for ( i = 0; i < MAX; i++) { printf("存储地址:var[%d] = %p\n", i, ptr ); printf("存储值:var[%d] = %d\n", i, *ptr ); /* 指向下一个位置 */ ptr++; } return 0; }
2)指针自减
#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指针中最后一个元素的地址 */ ptr = &var[MAX-1]; for ( i = MAX; i > 0; i--) { printf("存储地址:var[%d] = %p\n", i-1, ptr ); printf("存储值:var[%d] = %d\n", i-1, *ptr ); /* 指向下一个位置 */ ptr--; } return 0; }
3)指针比较
#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指针中第一个元素的地址 */ ptr = var; i = 0; while ( ptr <= &var[MAX - 1] ) { printf("存储地址:var[%d] = %p\n", i, ptr ); printf("存储值:var[%d] = %d\n", i, *ptr ); /* 指向上一个位置 */ ptr++; i++; } return 0; }
4、将整型数组中n个数按反序存放
使用指针将数组中n
个数,按照相反的顺序存放,代码如下,
#include <stdio.h> int main(int argc, char *argv[]){ int a[] = {1, 3, 5, 7, 9}; int *p, *q, n, t; p = a; n = sizeof(a) / sizeof(int); q = &a[n-1]; while(p < q){ t = *p; *p = *q; *q = t; p++; q--; } for(t = 0; t < n; t++) printf("%d ",a[t]); puts(""); return 0; }