首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【进阶指针二】数组参&指针参&函数指针&函数指针数组&回调函数

【进阶指针一】字符指针&指针数组&数组指针 https://blog.csdn.net/qq_64428099/article/details/125011487 目录  1.数组参 1-2 二维数组参...  2 指针参 2-1 一级指针参 2-2 二级指针参 2-3 关于&arr和arr 3 函数指针 3-1 函数指针的引入 3-2 函数指针的脱裤子放屁使用【先见一见基本操作】 3-3 试图看懂大佬写的代码... 4 函数指针数组 4-1函数指针数组的引入和基本使用  4-2 函数指针数组的妙用 ----  1.数组参 1-1一维数组参 正向:实参给定,猜猜看形参可以怎么写?...对于多维数组定义或者参时,只有第一维数组的数组元素可以省略,其余维必须写上,且必须写对!!! 2 指针参 反向:形参给定,猜猜看实参可以怎么写?...2-1 一级指针参 void test1(int* ptr)//一级指针:存放普通变量的地址 { //... } int main() { int a = 10; int* p = &a;

76540

参、指针参、引用参区别

在C中,我们只了解到有两种参方式,一种是值传递,另外一种是传递指针,一般情况下我们选择使用指针传递参数。在C++中,又新增了一种参方式,那就是引用(type &),引用参给我们带来了更好的体验。...2、指针传递 指针则解决了上面的两个问题,首先指针在32位系统下(64位系统是8字节)只有4个字节,无论数据多大,只要你将其指针传递给传输在压栈过程中只需要压一个4个字节的指针。...又取得的指针的优良特性。所以再对引用取地址,建立引用的指针没有意义。...int tmp = ra; ra = rb; rb = tmp; } int main(int argc, char* argv[]) { int x = 10; int y = 20; // 指针...// swap(&x, &y); // 引用 swap(x, y); cout << x << “–” << y << endl; getchar(); return 0; }

15540
您找到你想要的搜索结果了吗?
是的
没有找到

指针变量的值和

可以使用指针传递或者引用传递。想要在函数体内改变pRes的值,并把这个变化返回到main函数中,必须传递pRes的指针。因为pRes本身就是指针,所以应该传递指针指针,或者指针的引用。...、引用区别和联系 值:实参拷贝传递给形参。...地址:把实参地址的拷贝传递给形参。就是把实参的地址复制给形参。...引用:本质没有任何实参的拷贝,两个变量指向同一个对象。这是对形参的修改,必然反映到实参上。...无论值还是指针,函数都会生成一个临时变量,但引用时,不会生成临时变量, 值时,只可以引用值而不可以改变值,但值引用时,可以改变值, 指针时,只可以改变指针所指的内容,不可以改变指针本身,但指针引用时

2K30

指针变量的值和

可以使用指针传递或者引用传递。想要在函数体内改变pRes的值,并把这个变化返回到main函数中,必须传递pRes的指针。因为pRes本身就是指针,所以应该传递指针指针,或者指针的引用。...、引用区别和联系 值:实参拷贝传递给形参。...地址:把实参地址的拷贝传递给形参。就是把实参的地址复制给形参。...引用:本质没有任何实参的拷贝,两个变量指向同一个对象。这是对形参的修改,必然反映到实参上。...无论值还是指针,函数都会生成一个临时变量,但引用时,不会生成临时变量, 值时,只可以引用值而不可以改变值,但值引用时,可以改变值, 指针时,只可以改变指针所指的内容,不可以改变指针本身,但指针引用时

2.7K40

C语言函数参:指针指针

这是道哥的第013篇原创 前言 今天同事问了一个问题:在函数参数中传递指针指针,很常用的一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。...分析原因 我们可以把char*类型的指针看成一个遥控器,如果给这个指针赋值,就相当于把这个遥控器与一个设备进行绑定,可以通过遥控器来控制这个设备。...到这里就已经看到程序崩溃的原因了:虽然给指针p赋值了,但是实参pData中的内容一直为空,因此从do_malloc函数返回之后,pData仍然是一个空指针,所以就崩溃了。...执行do_malloc(&pData, 128); 把pData指针的地址作为实参进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针指针(二级指针),因此do_malloc函数的第一个参数就要定义成...p此时是一个二级指针,参数赋值之后,p里面的内容就变成了pData这个指针变量的地址,也就是说p指向了pData这个变量。

2.1K20

golang面试基础系列-值&指针(二)

在 Go 中函数传递参数有值和指针两种类型,本文将从细节之处剖析两者的不同。...仔细思考,原来就是今天要分析的 Golang 中关于函数值与指针的区别没搞清楚。...接下来,我们看一下指针的情况: package main import ( "encoding/json" "fmt" ) type Girl struct { Name...g0: 0xc42000c028 g1: 0xc42000c038 {"name":"yueyue","dress_color":"white"} 所以,在 Golang 中所有函数参数传递都是值拷贝,指针只是拷贝了一份指针副本...小结:在函数参过程中,需要合理使用值、指针。一般情况下,需要改变原始对象值、传递大的结构体,指针是最合适的,因为一个内存地址的开销很小。

85220

【C语言】指针进阶之值调用与址调用

1.前言 学习指针的⽬的是使⽤指针解决问题,那什么问题,⾮指针不可呢? ✔在编程语言如C中,值调用和址调用是用来传递参数给函数的方法。...它们的主要区别在于参数传递的方式: ☞值调用:这是最基本的参数传递方式,它涉及将参数的值复制一份传递给函数。...☞址调用:这种方式则是将参数的地址传递给函数。这样做的目的是让函数能够直接访问到传入的参数,并且可以对这些地址指向的数据进行修改。...✔址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量; 4.结论 所以未来函数中只是需要主调函数中的变量值来实现计算,就可以采⽤值调⽤。...如果函数内部要修改主调函数中的变量的值,就需要址调⽤。

6710

函数参数的值和指针有什么区别?

指针 那么为解决上面的问题,我们知道,需要指针。...为什么又有值,又有指针 看到这里,不知道你是否会疑惑,为什么给函数传递参数的时候,一会是值,一会是指针呢?为什么指针就能改变参数的值呢?实际上,C语言里,参数传递都是值传递!...也就是说,你认为的指针也是值,只不过它的值是指针类型罢了。 我们再通过图来理解前面为什么指针就可以交换a,b的值: ?...再看指针 如果是为指针p申请一段内存,下面的代码能达到目的吗?...getMemory 总结 本文总结如下: 函数的参数都是原数据的“副本”,因此在函数内无法改变原数据 函数中参数都是值,指针本质上也是值 如果想要改变入参内容,则需要该入参的地址(指针和引用都是类似的作用

3K30

指针详解(二级指针指针数组和数组指针、字符指针、二维数组参、函数指针变量)(二)

一、二级指针 问:指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?...四、二维数组参,形参写二维数组 1、为什么一维数组参,形参可以是数组,也可以是指针?...1.写成数组更加直观,为了方便理解 2.写成指针参是因为数组参,传递的是数组的第一个元素的地址 二维数组参,形参写成数组也是可以的,非常直观,容易理解 2、形参能写成指针吗?...int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} }; Print(arr,3,5);//打印arr数组内容 return 0; } 二维数组参...int(*)[5],那就意味着二维数组参本质上也是传递了地址,传递的第一行这个一位数组的地址,那么形参可以写成数组指针的形式 五、函数指针变量 函数指针变量的创建 函数指针用来存放函数的地址

13810

python 线程创建和

在以前的文章中虽然我们没有介绍过线程这个概念,但是实际上前面所有代码都是线程,只不过是单线程,代码由上而下依次执行或者进入main函数执行,这样的单线程也称为主线程。 ?...有了单线程的话,什么又是多线程?可以这么理解:一个线程执行一个代码块,多个线程可以同时执行多个代码,使用多线程能让程序效率更高。...二.线程创建和启动 1.导入线程模块 # 导入线程threading模块 import threading 2.创建线程并初始化线程 调用threading模块中的缺省函数Thread,创建并初始化线程...三.线程参 在上面的例子中,我们并没有为线程传递参数,如果在线程中需要传递参数怎么办呢?...猜你喜欢: 1.python模块 2.python匿名函数 3.python不定长参数 *argc,**kargcs 4.python异常处理 转载请注明:猿说Python » python线程创建和

2K30

c专题之指针----指针与函数参和输入、输出型参数

因为参时是值,所以这两个没区别)。所以在子函数内部,进来的数组名就等于是一个指向数组首元素首地址的指针。...思路只有一个那就是不要变量了,改变量的指针(地址)进去。...(3)结构体因为自身太大,所以参应该用指针(但是程序员可以自己决定,你非要结构体变量过去C语言也是允许的,只是效率低了)。...(2)现实编程中,一个函数需要返回多个值是非常普遍的,因此完全依赖于返回值是不靠谱的,通常的做法是用参数来做返回(在典型的linux风格函数中,返回值是不用来返回结果的,而是用来返回0或者负数用来表示程序执行结果是对还是错...函数参如果的是普通变量(不是指针)那肯定是输入型参数;如果指针就有2种可能性了,为了区别,经常的做法是:如果这个参数是做输入的(通常做输入的在函数内部只需要读取这个参数而不会需要更改它)就在指针前面加

1.3K20

值还是指针, 常见数据类型总结一览

传递指针还是传递值 在 golang 中,不论传递指针还是传递值(内容), 其实都是传递的「值副本」。...区别在于 前者(传递指针)传递的是 「指针的值副本」, 指针的副本也同样指向相同的内存块。就像复制后的钥匙可以打开原配的锁。 后者(传递内容)传递的是 「内容的值副本」。...不同类型的副本创建 bool,数值和指针 bool和数值类型一般不必考虑指针类型,原因在于这些对象很小,创建副本的开销可以忽略。只有你在想修改同一个变量的值的时候才考虑它们的指针。...*T创建的副本的元素时元数组元素指针的副本。 map、slice 和 channel 网上一般说, 这三种类型都是指向指针类型,指向一个底层的数据结构。...函数 函数也是一个指针类型,对函数对象的赋值只是又创建了一个对次函数对象的指针

67620

Linux线程池|单例模式|STL、智能指针线程安全|读者写者问题

:创建一批线程时,我们需要实现线程的运行函数static void*handlerTask,之所以是静态的,是因为我们要把这个运行函数传递给Thread类中的func_,不能有this指针,所以是静态成员函数...而没有this指针,我们无法访问ThreadPool里面的成员变量,所以需要封装接口供其调用。...我们要做的第一步就是把构造函数私有,再把拷贝构造和赋值运算符重载delete: 接下来就要在成员变量中定义一个静态指针,方便获取单例对象。...: 在设置获取单例对象的函数的时候,注意要设置成静态成员函数,因为在获取对象前根本没有对象,无法调用非静态成员函数(无this指针): 主函数进行调用: 不过也许会出现多个线程同时申请资源的场景...ThreadPool *ThreadPool::tp = nullptr; template std::mutex ThreadPool::_lock; STL,智能指针线程安全

24850
领券