Coding In C day12

/*
 * 指针常量与常量指针
 * */

#include <stdio.h>

main()
{
	int value = 3;
	const int *p_value = &value;//p_value是常量指针,简称"常指针"
	//*p_value = 4;//编译器报错error: assignment of read-only location '*p_value'
	{
	int * const p_value = &value;//p_value是指针常量
	(*p_value)++;//特别注意:语句中括号去掉编译器将报错!因为*p_value++被编译器理解为 先使用p_value中记录的数据间接访问,然后给p_value加一。
	//p_value = NULL;//编译器报错error: assignment of read-only location 'p_value'
	}
	p_value = NULL;

}


/*
 * 二级指针练习
 *
 * 切割字符串abcd,efg,hijkl,likk,l为abcd
 * */

#include <stdio.h>
#include <stdlib.h>
void split(char *p_str, char **pp_str) {
	int pos = 0;
	for (pos = 0; p_str[pos] != '\0'; pos++)
		if (p_str[pos] == ',')
			break;
	pos--;
	char *p_result = NULL;
	p_result = (char *)calloc(pos, sizeof(char));
	if (p_result) {
		for (*(p_result + pos) = '\0'; pos >= 0; pos--) {
			*(p_result + pos) = *(p_str + pos);
		}
	}

	*pp_str = p_result;
}


int main()
{
	char *p_str = NULL;
	split("abc,defg,kjk", &p_str);
	printf("%s\n", p_str);
	free(p_str);
	p_str = NULL;

	return 0;
}

/*
 * 函数指针:指向函数的指针练习
 *
 * 函数名称代表函数本身整个存储区,函数名称还代表着函数中的第一条语句的地址。函数名取址是函数地址,是整个函数的地址。这和数组名称一样,数组名称代表数组本身的整个存储区,数组名称还代表数组第一个元素的地址。数组名取址是整个数组的地址。
 *
 * 函数地址。 从地址信息上看函数地址就是函数中第一条语句所在的地址。
 *
 * */

#include <stdio.h>

int main()
{
	int add(int , int);
	int sub(int , int);
	printf("add是%p\n", add);
	printf("&add是%p\n", &add);

	int (*p_f)(int, int);
	p_f = add;
	printf("p_f(1, 1)是%d\n", p_f(1, 1));

	int (*p_func)(int, int) = NULL;
	p_func = add;
	printf("p_func(1, 1)是%d\n", p_func(1, 1));
	p_func = sub;
	printf("p_func(1, 1)是%d\n", p_func(1, 1));

	typedef int (*p_function)(int, int);
	p_function p_f1 = NULL;
	p_f1 = sub;
	printf("p_f1(1, 1)是%d\n", p_f1(1, 1));
	

	return 0;
}

int add( int value, int value1)
{
	return value + value1;
}
int sub( int value, int value1)
{
	return value - value1;
}

/*
 * 函数指针练习
 *
 *
 * */
#include <stdio.h>

int add(int, int);
int sub(int, int);

int main()
{

	int (*p_func)(int, int) = NULL;

	int opr = 0;
	printf("输入+将完成1+1计算,输入-将完成1-1运算:");
	scanf("%c", &opr);
	switch (opr) {
		case '+':
			p_func = add;
			break;
		case '-':
			p_func = sub;
			break;
		default:
			printf("程序错误\n");
			return -1;
	}

	printf("运算 %c 结果是%d\n", opr, p_func(1, 1));

	return 0;
}


int sub(int a, int b)
{
	return a - b;
}

int add(int a, int b)
{
	return a + b;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值