指针相关知识(进阶)

news/2024/11/20 21:21:28/

前面的入门中已经介绍了指针的基础知识,接下来,让我们继续学习吧!

一. 字符指针变量

char*

一般形式

int main()
{char n = 'w';char* pa = &n;*pa = 'w';return 0;
}

这并不是把字符串hello world放在n中,而是把第一个字符的地址放在n中

int main()
{char str1[] = "hello world";char str2[] = "hello world";const char* str3 = "hello world";const char* str4 = "hello world";if (str1 == str2)printf("str1 and str2 are same\n");elseprintf("str1 and str2 are not same\n");if (str3 == str4)printf("str3 and str4 are same\n");elseprintf("str3 and str4 are not same\n");return 0;
}

这是因为str1和str2是数组,因此表示的是首元素的地址,这两个不同。

str3和str4是常量字符串,内容相同的常量字符串只会保存一份

二.数组指针变量

int * n;

float * a;

int *p1[10];p1是数组,10个元素,每个元素的类型是int*(指针数组

int (*p2)[10];p2是指针‘指针指向的是数组,10个元素,每个元素的类型是int(数组指针

三.二维数组传参的本质

void test(int(*p)[5], int r, int c)
{int i = 0;int j = 0;for (j = 0; j < c; j++){printf("%d ", *(*(p + i) + j));}printf("\n");
}
int main()
{int arr[3][5] = { {1,2,3,4,5}, {2,3,4,5,6}, {3,4,5,6,7} };test(arr, 3, 5);return 0;
}

二维数组传参,形参可以是数组,也可以是指针

void test(int(*p)[5], int r, int c)
void test(int a[3][5], int r, int c)

二维数组是元素是一维数组的数组

四.函数指针变量

void test()
{printf("hehe\n");
}void (*pf1)() = &test;
void (*pf2)() = test;int Add(int x, int y)
{return x + y;
}int(*pf3)(int, int) = Add;
int(*pf3)(int x, int y) = &Add;
int(*pf3)(int x, int y)

int   pf3指向函数的返回类型

*pf3     函数指针变量名

int(*)(int x, int y)    pf3函数指针变量的类型

五.函数指针数组

int (*parr[3])();

函数指针的类型是int (*)();

六.回调函数

回调函数是一个通过函数指针调用的函数

也就是说,将代码中冗余的部分作为模板,然后将它放在一个函数中,在下面如果有用到的地方就调用,多次调用,只是有小部分的不同即可


http://www.ppmy.cn/news/1271462.html

相关文章

关于论坛中 Edge 问题解决教程汇总

常见问题 使用 Microsoft Edge 浏览器时&#xff0c;可能会遇到一些具体的问题&#xff0c;以下是一些常见问题及可能的解决方法&#xff1a; 1. 页面加载缓慢&#xff1a; 解决方法&#xff1a; 检查网络连接&#xff1a;确保网络连接稳定。清除浏览器缓存&#xff1a;打开…

Axure元件库的使用

1.基本元件库 1.1Axure的画布范围 Axure是一个绘制项目原型图的软件&#xff0c;它里面的基本原件有&#xff1a; 1.1元件的呈现范围 首先我们要了解基本元件的作用范围在哪里&#xff1f; 浏览效果&#xff1a; 可以看出当我们的基本元件放在画布区域内是可以完全呈现出来…

【Spring教程29】Spring框架实战:从零开始学习SpringMVC 之 服务器响应知识全面详解

目录 1 环境准备2 响应页面3 返回文本数据4 响应JSON数据5 知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配…

当指定了一个 messageid 后,发送或插入消息,即使成功,也查询不到此消息

SDK messageid 仅在发送失败时&#xff0c;可以使用 SDK 已经构建好的 id&#xff0c;不支持自己指定一个自定义的 id 值。 如果传入一个 SDK 不存在的 id 会导致消息丢失 如果传入一个 SDK 存在的但不是当前消息的 id&#xff0c;会导致原有消息内容发生变更&#xff0c;导致消…

现代雷达车载应用——第2章 汽车雷达系统原理 2.2节 汽车雷达架构

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.2 汽车雷达架构 从顶层来看&#xff0c;基本的汽车雷达由发射器&#xff0c;接收器和天线组成。图2.2给出了一种简化的单通道连续波雷达结构[2]。这…

从零开始:前端架构师的基础建设和架构设计之路

文章目录 一、引言二、前端架构师的职责三、基础建设四、架构设计思想五、总结《前端架构师&#xff1a;基础建设与架构设计思想》编辑推荐内容简介作者简介目录获取方式 一、引言 在现代软件开发中&#xff0c;前端开发已经成为了一个不可或缺的部分。随着互联网的普及和移动…

宣布全面推出适用于 macOS 的 Amazon EC2 M2 Pro Mac 实例

即日起&#xff0c;Amazon Elastic Compute Cloud (Amazon EC2) M2 Pro Mac 实例现已全面推出 (GA)。在为 Apple 平台&#xff08;例如 iOS、macOS、iPadOS、tvOS、watchOS、visionOS 和 Safari&#xff09;构建和测试应用程序时&#xff0c;这些实例的性能比现有的 M1 Mac 实例…

C++中的接口有什么用

2023年12月13日&#xff0c;周三上午 今天上午在适配器模式&#xff0c;我发现如果想真正理解适配器模式&#xff0c;就必须学会使用C中的接口&#xff0c;就必须明白为什么要在C中使用接口&#xff0c;所以重新学习了一下C中的接口 目录 C中的接口有什么用用代码说明“实现多…