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

C语言函数指针指针

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

2.1K20

指针、引用区别

C中,我们只了解到有两种方式,一种是值传递,另外一种是传递指针,一般情况下我们选择使用指针传递参数。在C++中,又新增了一种方式,那就是引用(type &),引用给我们带来了更好的体验。...2、指针传递 指针则解决了上面的两个问题,首先指针在32位系统下(64位系统是8字节)只有4个字节,无论数据多大,只要你将其指针传递给传输在压栈过程中只需要压一个4个字节的指针。...在传递给函数时相当于包装了原变量指针的地址传递给函数,可以理解为在函数中直接使用原变量进行操作,而且这个期间不会出现拷贝的行为。引用的本质是指针C++对裸露的内存地址(指针)作了一次包装。...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
您找到你想要的搜索结果了吗?
是的
没有找到

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

【进阶指针一】字符指针&指针数组&数组指针 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;

76740

c语言二维数组参数_c语言数组

第一种形为二维数组 声明 void function(int a[m][n]);//函数声明 void function(int a[][n]);//不论多少维数组,第一维都可省略。...第二种形为数组指针 (其实只是 声明定义 与第一种不同,其他一样) 声明 void function(int (*a)[n]); //不是(int *a[n])(指针数组) ,而是(int (*a)...第三种形为二级指针 声明 void function(int **a,int n);n表示第二维数组长度,即列宽 调用 function( (int **)a,int n);//实参不能为数组名!...二维数组,数组指针,二级指针。(都是指针) 调用(一对一,二对二) 数组指针,二维数组就写一级指针即 数组名....二级指针就写二级指针即 (int**)数组名 在函数中操作元素(注意二级指针,只能用最后的方法) *(a[i] + j) //代表第 i 行 第 j 列 *( *(a+i) + j) //同上 *(

2.7K10

C语言-函数的定义、声明、

前言 C语言里函数是非常重要的知识点,一个完整的C语言程序就是由主函数和各个子函数组成的,主函数调用子函数完成各个逻辑功能。 2. 函数在C语言里是什么概念?...C语言程序里除了main函数(主)之外的函数都叫子函数,都属于自定义函数。 3. 函数如何定义?如何编写一个函数? 函数定于分为几种情况:1. 有形 2.无形 3.有返回值 4....无返回值 /* [函数的名称](函数的形类型) { 函数体 } */ void func1(void) { } int func2(int a) { return 12;...函数如何传入形并接收返回值?...c=a+b; return c; //返回结果,并终止函数执行 } 6. return 语句作用 return 本身功能终止函数执行,顺带返回一个值给调用者。

1.4K10

C语言-指针作为函数形类型

前言 C语言函数里最常用就是指针和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型...这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。 下面通过几个示例代码来演示用法。 2....c=*a; *a=*b; *b=c; } //return语句只能返回一个值 //如果函数想返回多个值,可以使用指针(形)实现。...编写一个字符串排序函数 函数功能: 传入字符串,在函数里实现字符串从大到小或者小到大排序。 注意: 从大到小或者小到大排序可以通过函数形区分。...='\0'){} return str-p-1; } /* 函数功能: 实现字符串排序.支持从小到大或者大到小 函数形: char *p 将要排序的字符串 char flag 选择排序方式

1.4K30

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

一、指针与函数: 1、普通变量作为函数形: (1)函数时,普通变量作为参数时,形和实参名字可以相同也可以不 同,实际上都是用实参来替代相对应的形的。...因为时是值,所以这两个没区别)。所以在子函数内部,进来的数组名就等于是一个指向数组首元素首地址的指针。...(3)结构体因为自身太大,所以应该用指针(但是程序员可以自己决定,你非要结构体变量过去C语言也是允许的,只是效率低了)。...总的来说,函数参数用的比较多,因为这样可以实现模块化编程,而C语言中也是尽量减少使用全局变量。...函数如果的是普通变量(不是指针)那肯定是输入型参数;如果指针就有2种可能性了,为了区别,经常的做法是:如果这个参数是做输入的(通常做输入的在函数内部只需要读取这个参数而不会需要更改它)就在指针前面加

1.3K20

C语言字符串指针

更改上面的代码,使用指针的方式来输出字符串: #include #include int main(){ char str[] = "http://c.biancheng.net...http://c.biancheng.net 除了字符数组,C语言还支持另外一种表示字符串的方法,就是直接使用一个指针指向字符串,例如: char *str = "http://c.biancheng.net...关于全局数据区、栈区、常量区以及其他的内存分区,我们将在《C语言内存精讲》专题中详细讲解,相信你必将有所顿悟,从根本上理解C语言。...第4行代码是正确的,可以更改指针变量本身的指向;第5行代码是错误的,不能修改字符串中的字符。...最后我们来总结一下,C语言有两种表示字符串的方法,一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。

6K20

c语言函数指针的用法_函数指针作为形

文章目录 导引 指针函数 指针函数定义 指针函数的三种写法 代码示例 函数指针 定义 代码示例 函数指针指针函数区别 定义不同 写法不同 用法不同 导引 函数指针指针函数,在学习 C 语言的时候遇到这两个东西简直头疼...,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,...指针函数 指针函数定义 指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。...函数指针 定义 函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。...函数指针指针函数区别 通过以上的介绍,应该都能清楚的理解其二者的定义。那么简单的总结下二者的区别: 定义不同 指针函数本质是一个函数,其返回值为指针。 函数指针本质是一个指针,其指向一个函数。

57420

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

1.前言 学习指针的⽬的是使⽤指针解决问题,那什么问题,⾮指针不可呢? ✔在编程语言C中,值调用和址调用是用来传递参数给函数的方法。...它们的主要区别在于参数传递的方式: ☞值调用:这是最基本的参数传递方式,它涉及将参数的值复制一份传递给函数。...这种调⽤函数的⽅式我们之前在函数的时候就知道了,这种叫值调⽤。 结论:实参传递给形的时候,形参会单独创建⼀份临时空间来接收实参,对形的修改不影响实 。 所以Swap是失败的了。 那怎么办呢?...✔址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量; 4.结论 所以未来函数中只是需要主调函数中的变量值来实现计算,就可以采⽤值调⽤。...如果函数内部要修改主调函数中的变量的值,就需要址调⽤。

6810

C语言 | 指针引用字符串

C语言字符串的引用方式 在C语言程序中,字符串是存放在字符数组中的。 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。...C语言字符指针作函数参数 如果想把一个字符串从一个函数“传递”到另一函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。...C语言使用字符指针变量和字符数组的比较 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。...C语言使用字符指针变量和字符数组注意事项 指针变量的值是可以改变的,而数组名代表一个固定的值,即数组首元素地址,不能改变。...100道C语言源码案例请去公众号:C语言入门到精通

1.2K40

C语言总结_数组与函数练习题

字符串标准处理函数介绍(string.h)、指针和数组当做函数形指针定义、函数返回指针、void类型定义指针、类型强制转换、常量声明、extern外边引用声明关键字。 1....指针可以当做数组使用,数组无法当做指针使用。 数组的名称: 就是首地址 在C语言里任何类型的指针(地址)是4个字节 2....函数参数: 指针与数组类型 函数的形: 指针类型与数组类型 示例代码: () #include //标准输入输出 #include //字符串处理头文件...数组当做函数形的问题 示例: #include //标准输入输出 #include //字符串处理头文件 void my_func1(char buff[...char buff[] func(void){} 错误的 函数如果要返回地址类型: 必须使用指针类型。 函数形如果要传入地址类型: 可以使用指针类型或者数组类型。

81420

C 语言字符串拷贝 ( 优化指针操作 )

文章目录 一、优化指针操作 二、优化指针操作 2 三、优化指针操作 3 四、优化指针操作 4 一、优化指针操作 ---- 在上一篇博客 【C 语言字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数...操作 , 然后进行 to++, from++; 优化后的指针操作 : /* * 实现字符串拷贝 ( 实现了模块化 ) * 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换...指针指向的字符串 拷贝到 to 指针指向的字符串换 */ void str_copy2(char *from, char *to) { // 从 from 指针指向的字符 拷贝到 /...( 实现了模块化 ) * 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换 */ void str_copy2(char *from, char *to) { /...= '\0' 比较删除 ; 优化后的函数代码 : /* * 实现字符串拷贝 ( 实现了模块化 ) * 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换 */ void str_copy2

45000
领券