一、引例3:顺序查找
数组法:
#include<stdio.h>
#define N 6
int main() {
int a[N] = { 5,7,3,9,8,4 },index=-1,key=3;
for (int i = 0; i < N; i++) {
if (a[i] == key) {
index = i;
break;
}
}
if (index == -1) {
printf_s("查找失败!\n");
}
else {
printf_s("查找成功,元素%d在集合中的序号是%d\n",key, index+1);
}
}
指针法:
#include<stdio.h>
#define N 6
int main() {
int a[N] = { 5,7,3,9,8,4 },*p=a;//指向数组首地址
int index=-1,key=3;
for (; p < a+N; p++) {
if (*p == key) {
index = p-a+1;
break;
}
}
if (index == -1) {
printf_s("查找失败!\n");
}
else {
printf_s("查找成功,元素%d在集合中的序号是%d\n", key, (int)(p-a+1));//写index也可以,这里主要是强调int的类型转换
}
}
二、用指针访问一维数组(三种方式)
p可移动,a是固定的常量
三、指针的运算
1.p++自增运算
2.指针变量的算术运算 & 指针变量的关系运算
四、引例4
#include<stdio.h>
void inputArray(int a[], int x) {//传数组要传数组&数组的长度
for (int i = 0; i < x; i++) {
scanf_s("%d", &a[i]);
}
}
void outputArray(int a[], int x) {
for (int i = 0; i < x; i++) {
printf("%d ", a[i]);
}
}
void process(int a[],int x) {
int min = a[0],max=a[0],indexmin=0,indexmax=0;
for (int i = 0; i < x; i++) {
if (a[i] < min) {
min = a[i];
indexmin = i;
}
else if (a[i] > max) {
max = a[i];
indexmax = i;
}
}
a[indexmin] = a[0];
a[0] = min;
a[indexmax] = a[x - 1];
a[x - 1] = max;
}
int main() {
int a[10];
inputArray(a, 10);
process(a, 10);
outputArray(a, 10);
}
指针法改写void process:
void process(int *a,int x) {
int *p=a,*min=a,*max=a;
for (; p < x+a; p++) {
if (*p < *min) {
min = p;
}
else if (*p > *max) {
max = p;
}
}
*p = a[0];
a[0] = *min;
*min = *p;
*p = a[x-1];
a[x-1] = *max;
*max = *p;
}