以定义引出,和各种数据类型结合辅助。
定义+引用
// 定义指针变量+引用 (类型名 * 指针变量名;)
void test01() {
int a, b;
int *pointer_1, *pointer_2; // 指针变量:pointer_1; 指针型变量指向的值:*pointer_1; *:指针运算符
pointer_1 = &a; // 指针变量赋值
pointer_2 = &b;
a=b=9;
printf("%d,%d\n", &a, &b);
printf("%d,%d\n", pointer_1, pointer_2); // 引用指针变量的值
printf("%d,%d\n", a, b); // 引用指针变量指向的变量
printf("%d,%d\n", *pointer_1, *pointer_2);
}
指针变量 --> 作为参数
// 指针变量 --> 作为参数
void test02(int *p1, int *p2) {
int temp;
printf("原数据:%3d,%3d\n", *p1, *p2);
temp = *p1, *p1 = *p2, *p2 = temp;
printf("交换后数据:%3d,%3d\n", *p1, *p2);
}
通过指针调用数组(一维数组)
// 通过指针引用数组(数组直接给初始地址) -- 三种引用方式
void test03_1(int a[]) {
int i, *p;
p = a;
for(i=0; i<10; i++, p++) {
printf("%3d ",&a[i]); // 数组地址 &a[i] == a+i == p
printf("%3d ",a+i);
printf("%3d ",p);
printf("%d ",*(a+i)); // 数组值 a[i] == *(a+i) == *p
printf("%d ",a[i]);
printf("%d \n",*p);
}
}
// 通过指针引用数组(数组给指针一个初始地址)
void test03(int *p) {
int i;
int *address = p;
for(i=0; i<10;i++, p++) *p = i, printf("%3d\n",*p);
p = address;
for(i=0; i<10; i++, p++) printf("%5d\n",*p);
}
通过指针调用数组(二维数组)
// 指针+二维数组--形参(首地址的获取--第0行[列值有n个的指针])
void test06(int *c1, int (*c2)[9]) {
int i, r, c;
for(i=0; i<9; i++) printf("%3d",*(c1+i));
printf("\n");
for(r=0; r<9; r++) {
printf("\n");
for(c=0; c<9; c++)
printf("%3d",*(*(c2+r)+c));
}
}
// 指针+二维数组(用指针的方式来表示数组)--调用
void test05() {
int r, c;
int a[2][2] = {{1, 2}, {3, 4}};
printf("%d,%d,%d\n", *a, a, &a[0][0]); // 1、a[0][0]地址
printf("%d,%d,%d\n",*(a+1), &a[1], &a[1][0]); // 2、a[1][0]地址
printf("%d,%d,%d\n",*a[1], *(*(a+1)+0), a[1][0]); // 3、a[1][0]数值
for(r=0; r<2; r++) for(c=0; c<2; c++) printf("%d", *(*(a+r)+c));
}
void test4(int a[], int left, int right) {
int i=left, j, k, temp;
temp = a[i];
if(left < right) {
for(i=left, j=left; i<left+(right-left); i++) {
if(a[i]>temp) {
a[j]=a[i], j++;
for(k=i; k>j;k--) a[k]=a[k-1];
a[j]=temp;
}
}
test4(a, j+1, right);
test4(a, left, j);
}
}
通过指针调用数组(字符数组)
// 指针+字符串(定义+调用+作函形参)
void test07(char a[], char *string) {
char *p1, *p2;
p1 = a, p2 = string; // 调用
for(; *p1=='\000'; p1++, p2++) *p1 = *p2;
printf("%s,%s\n",p1, p2);
printf("%s,%s\n",a, string); // 定义
}
指针函数(定义int (*p)(int int) 调用和数组相同)
// 指针+函数(定义int (*p)(int int) 调用和数组相同)
void test08() {
int test08_1(int a, int b);
int (*p)(int, int);
int min = 0, max = 9080;
p = test08_1;
printf("%d\n", (*p)(min, max));
}
int test08_1(int a, int b) {
if(a > b) return a;
else return b;
}
上面主要写的是:
-
指针的定义、声明、初始化
-
+数组结合:指向指针 + 指针数组
-
+函数结合:指向函数