c语言(指针进阶)

指针

一.什么是字符指针

字符指针:指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。即将字符串的首地址赋值给字符指针,可让字符指针指向一个字符串。

c 复制代码
int main()
{
	char str1[] = "hello bit.";
	char str2[] = "hello bit.";
	const char* str3 = "hello bit.";
	const char* str4 = "hello bit.";
	
	if (str1 == str2)
		printf("str1 and str2 are same\n");
	else
		printf("str1 and str2 are not same\n");

	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not same\n");

	if (&str3 == &str4)
	{
		printf("Yes\n");
	}
	else
	{
		printf("No\n");
	}

	return 0;
}

上述代码中的运行结果

第一个 的运行结果为什么是不同的 :因为str1和str2是两个不同的字符数组,开辟的空间也是不同的
第二个 的运行结果是相同的:因为str3和str4都是字符串常量,指向的地址都是相同的

二.使用指针数组模拟二维数组

c 复制代码
int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int arr2[] = { 2,3,4,5,6 };
	int arr3[] = { 3,4,5,6,7 };
	        //int*  int*  int*
	
	//指针数组
	int* a[3] = { arr1,arr2,arr3 };

	for (int  i = 0; i < 3; i++)
	{
		for (int j = 0; j < sizeof(arr1) / sizeof(arr1[0]); j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

arr[i]就是相当于拿到了每个元素的数组名,j相当于拿到了每一列的数组名

三.函数指针

c 复制代码
int Add(int x, int y)
{
	return x + y;
}


int main()
{
	//&函数名就是函数的地址
	//函数名也是函数的地址

	printf("%p\n", &Add);
	printf("%p\n", Add);

	int(*pf1)(int, int) = Add;

	//int (*pf1)(int, int) = Add;//pf1就是函数指针变量

	//int (* pf2)(int, int) = &Add;
	//int ret = (* pf2)(2, 3);

	//int (* pf2)(int, int) = Add;
	//int ret = pf2(2, 3);
	//int ret = pf2(2, 3);

	int ret = Add(2, 3);

	printf("%d\n", ret);

	return 0;
}

1.首先需要一个指针变量*pf1=Add

2.因为运算符的优先级所以*pf1需要用括号括起来(*pf1)

3.是什么类型的,如果是int就是 int(*pf1),其他类型是一样的

  1. 上面函数参数是两个整型 ,所以第二个括号就是int (*pf1)(int , int ),两个参数可以省略

  2. int ret = (* pf2)(2, 3);对函数指针直接进行传参

以上就是函数指针

c 复制代码
int main()
{
	( *(void (*)()) 0 )();

	return 0;
}

上述代码所说的是,函数没有参数,返回类型是void,参数也是空,强转为函数指针类型

c 复制代码
void (* signal(int,void(*)(int)))(int);

此代码是一次函数声明,声明的是signal函数
int是signal函数的第一个参数,void (*)(int)是此函数的第二个参数,是函数指针类型,参数是int,返回类型是void

相关推荐
充值修改昵称8 分钟前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch20 分钟前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
Lhuu(重开版30 分钟前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
csdn_aspnet37 分钟前
C 语言的优雅回归:从零手造数据结构
c语言·数据结构
仙俊红1 小时前
Java Map 家族核心解析
java·开发语言
浅念-1 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me1 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML2 小时前
第九章:EM 算法
人工智能·算法·机器学习
想放学的刺客2 小时前
单片机嵌入式嵌入式试题(第16期):硬件可靠性设计与复杂状态机架构设计
c语言·stm32·单片机·嵌入式硬件·物联网
code_li2 小时前
聊聊支付宝架构
java·开发语言·架构