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;
}