C语言笔记--1数据类型——2指针

以定义引出,和各种数据类型结合辅助。


定义+引用

// 定义指针变量+引用  (类型名 * 指针变量名;)
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;
}

上面主要写的是:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值