这是道哥的第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这个变量。
就类似于sql中的存储一样,随着语言层次的增高封装性是越来越大的。...); } 对于结构体的基础语法说完了,下面来说结构体指针 结构体指针 一个结构体变量的指针就是该结构体变量所占据内存段的起始地址。...可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。 同时指针变量也可以用来指向结构体数组中的元素。...与前面讨论的各类指针变量相同,结构体指针变量也必须要先赋值才能使用 赋值就是把结构变量首地址赋予该指针变量,不能把结构名赋予该指针变量。...在C语言中不允许动态数组类型。例如:a[n]就是错误的,必须要用一个实际的数字表示数组长度,但是在实际开发中,往往会发生这种情况,即所需要的内存空间取决于实际输入的数据,而无法预先确定。
struct ListNode *next; }; struct ListNode* temp; //1 struct ListNode header; //2 语句1中的temp是一个指针...,指向某个结构体,只占有一个指针的内存;语句2中的header是一个结构体,占有一整个结构体的内存,header中有数据域与指针域。...temp = &header 该行语句的意思则是将header(结构体)的地址存放到temp(一个指针)中。 ---- 我们看到的结构体成员引用方式有以下三种。...(*temp).val //1 temp->val //2 head.val //3 即(这三种都是等价的): (*指针变量名).成员名 指针变量名->成员名...结构体名.成员变量名
C语言指向结构体变量的指针 在C语言中,指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。 指针变量的基类型必须与结构体变量的类型相同。...C语言中允许 (*p).num用p->num来代替 ->代表一个箭头 p->num表示p所指向的结构体变量中的num成员 C语言指向结构体数组的指针 (++p)->num 先使p自加1,然后得到p指向的元素中的...C语言用结构体变量和结构体变量的指针作函数参数 用结构体变量的成员作参数,用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 用结构体变量作实参。...用结构体变量作实参时,采取的也是“值传递”的方式,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量。...用指向结构体变量(或数组元素)的指针作实参,将结构体变量的地址传给形参。
-- 文章目录 @[toc] ✍前言 指针 什么是指针 指针类型与指针解引用 野指针 指针运算 指针和数组 二级指针 指针数组 结构体 结构体的声明与成员的类型 结构体变量的定义和初始化及访问 结构体传参...结语 ✍前言 指针和结构体这两块内容是非常重要的,可以说是C语言的重点内容了,同时,如果学习C语言版的数据结构,我们可以知道,基本所有的数据结构都是建立在结构体之上的,以及相关操作也要用到指针,指针和结构体也是...C语言的特点,对于一些面向对象的语言来说,如java就没有指针和结构体这种说法存在了。...return 0; } 结构体传参 传参既可以传结构体,也可以传结构体地址>,下面进行代码演示: 可以看到两种传参方式不同,打印出来的效果却是一样的,但是有什么区别呢?...函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 所以,对于结构体传参的时候,传结构体的地址较好。
01指向结构体变量的指针 1、指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。 2、指针变量的基类型必须与结构体变量的类型相同。...3、C语言中允许把(*p).num用p->num来代替,“->”代表一个箭头,p->num表示p所指向的结构体变量中的num成员。...03用结构体变量和结构体变量的指针作函数参数 1、用结构体变量的成员作参数。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 2、用结构体变量作实参。...用结构体变量作实参时,采取的也是“值传递”的方式,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量。...3、用指向结构体变量(或数组元素)的指针作实参,将结构体变量的地址传给形参。 C语言 |求3*4矩阵中最大的元素值及行列 更多案例可以go公众号:C语言入门到精通
C语言结构体与结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合...c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。...二、结构体指针的使用 1.结构体指针的定义方法 1)struct 结构体名 *指针; 2)直接在定义结构体的时候添加结构体指针的声明 //在main()方法中定义 struct student...(输出) 结构体指针的访问变量方法 1)p->结构体成员; 2)(*p).结构体成员; //指针访问 struct student *p;//定义结构体指针 p=&st1; printf("%d %...s %c\n",p->num,p->name,p->sex); 1234 //指针访问 struct student *p;//定义结构体指针 p=&st1; printf("%d %s %
通过结构体数组给定 3 个学生的信息。信息包括:学号,姓名,成绩,找出成绩最高的学生的所有信息。...;i<=4;i++){ printf("%d %s %f\n",a[i].name,a[i].name,a[i].score); } return 0; } 有3个学生结构体变量
结构体 C语言除了有基本的数据类型外,还可以借助struct自定义数据类型,用来描述复杂的对象。 比如描述一个学生,需要姓名、学号、班级、成绩、身份证号等信息。...2.1 结构体的定义 //一个学生所具有的基本信息 struct student{ char name[10]; char num[20]; int class; int...2.2 结构体的初始化 假设已经定义了struct student的数据类型 只能在定义的同时初始化,而不能先定义再初始化。...struct student a = {"xiaozhang","10001",1,95,"41XXXXXXXXXXXXXX"}; 2.3 结构体的使用 使用圆点操作符.访问一个结构体中的单个成员。...,前提是一个结构体指针。
在C中,我们只了解到有两种传参方式,一种是值传递,另外一种是传递指针,一般情况下我们选择使用指针传递参数。在C++中,又新增了一种传参方式,那就是引用(type &),引用传参给我们带来了更好的体验。...1、值传递 值传递是一种值拷贝的操作,一般只用于传入参数使用,而且如果传入的值体积过大(比如一个结构体),在函数压栈的过程中会拷贝一份压入栈中,会影响效率。...在传递给函数时相当于包装了原变量指针的地址传递给函数,可以理解为在函数中直接使用原变量进行操作,而且这个期间不会出现拷贝的行为。引用的本质是指针,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; }
文章目录 一、结构体作为函数参数 二、结构体指针作为函数参数 三、完整代码示例 一、结构体作为函数参数 ---- 结构体变量 作为函数形参 , 在函数中 , 只能访问 该函数形参 , 无法修改 结构体内存...的值 ; 结构体变量 通过 形参形式传入 , 会在该 printf_student 方法的栈内存中 , 重新为该 结构体变量 分配内存 , 函数执行结束 , 这块内存就自动收回了 ; 因此在该函数中..., 结构体形参 , 只能访问 , 不能修改 ; 代码示例 : /** * @brief printf_student 结构体变量 作为参数 * @param s */ void printf_student...---- 结构体指针变量作为参数 , 可以 通过 指针 间接赋值 , 在该函数中 , 将 from 结构体指针指向的变量 拷贝到 to 结构体指针指向的变量 ; 注意 : 函数中传入的是 指向 结构体变量的指针...copy_student 结构体指针变量作为参数
结构体指针作为函数参数: 结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。...如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。...\n"); //数组名可以认为是一个指针 averge(stus,len); } void averge(struct stu *stus,int len){
在一次稀疏矩阵压缩算法中,为了保证压缩函数可复用性,使用了void** 作为压缩形参,结果二维数组传入一直无法获取到内容。...结果出现的方案如下 方法1 方法2: 数组指针 或者是 二级指针 结果相同 int ** arr; 上述两种情况指针步长都会是一个int* 的大小,也就是4个字节 ,这个可以从第二章图,13630500
例40:C语言实现通过指向结构体变量的指针变量变量输出结构体变量中的信息。...解题思路:在主函数中声明了struct student类型,然后定义了一个struct student类型的变量s_1,又定义了一个指针变量p,它指向一个struct student类型的对象,将结构体变量...#include//头文件 #include//为了引用strcpy函数 int main(){//主函数 struct student{ //学生结构体... struct student *p;//定义结构体指针变量 p=&s_1;//将s_1得地址赋给指针变量 s_1.num=10010;//赋值 strcpy(s_1.name,"yan...思考两个问题,怎么对结构体变量成员赋值?怎么通过指向结构体变量的指针访问结构体变量中成员? C语言 | 通过指向结构体变量的指针变量输出结构体变量中的信息 更多案例可以go公众号:C语言入门到精通
= {s2, s3}; return c1; } -- 传递结构体指针 : 传递结构体的指针, 访问形式如下; /* * 传入一个结构体指针 * 通过指针访问结构体的方法 : * (*结构体指针变量...} /* * 传入一个结构体指针 * 通过指针访问结构体的方法 : * (*结构体指针变量).成员变量 访问; * 结构体指针变量 -> 成员变量 访问; */ void printf_struct_pointer...= %d \n", c1.s1.name, c1.s1.age, c1.s2.name, c1.s2.age); /*声明结构体指针*/ struct student *p = &s1; printf_struct_pointer...需求 : 实现一个统计 C 语言关键字出现次数; 代码 : /********************************************************************...: * struct key tab * 是指向结构体数组指针, 该指针可以操作结构体数组 */ struct key *binsearch(char *word, struct key *
函数指针在C语言中的意义 在C语言程序中,数据结构和算法是两个基本的元素。C语言的基本数据类型、结构体、数组和联合体是数据结构的代表;C语言中的函数则是算法的代表。...只有将数据结构和算法有机结合才能构成具有一定功能的程序。 函数指针的应用 函数指针在嵌入式中的应用非常广泛,常常把函数指针作为结构体的成员、作为函数的参数等。...如在物联网操作系统RT-Thread内核源码中,有如下代码: 1、函数指针作为结构体成员 ?...2、函数指针作为函数的参数 举例说明 建立一个结构体,用于四则运算(根据函数指针的指向可以选择加法运算、减法运算、乘法运算、除法运算),如 typedef int (*fun_t)(int, int);...以上就是函数指针作为结构体成员的笔记,如有错误欢迎指出!
【进阶指针一】字符指针&指针数组&数组指针 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 指针传参 反向:形参给定,猜猜看实参可以怎么写?
前面说到,将指针作为参数传入,在函数内部对指针进行修改,函数结束后指针的修改将被保留。 因为指针传参代表着地址传参。 本篇解惑:如何让对指针参数的修改不被保存。...原因很简单,pNode->next也是一个映射地址,这句话的意思就是用一个新的地址映射,顶替掉那个旧的,使得指针pNode指向一块新的地址,和the_head失去联系。
输入三个学生的个人信息 包含学号 姓名和三门学科的成绩 输出平均成绩最高的学生的学号 姓名 各科成绩以及平均成绩 代码如下(谭浩强c程序设计的例子) #include struct...,只是结构体是将不同类型组合后形成的一个用户自己定义的数据结构。...结构体变量: 该程序定义了一个结构体数组和一个结构体指针,就像数组和指针的定义一样,需要说明数组和指针的类型,数组就是可以存放什么类型的数据,指针是可以指向什么类型的数据。...struct Student stu[3]; struct Student *p=stu; 用结构体变量和结构体变量的指针做函数的参数: 定义结构体指针p,并初始化它让他指向结构体数组stu的首地址...input函数形参为结构体数组,实参为结构体指针。 max函数形参为结构体数组,实参为结构体指针。 print函数形参是结构体变量,实参是结构体变量(是结构体数组元素)。
前言 本小节,我们学习结构的内存对齐,理解其对齐规则,内存对齐包含结构体的计算,使用宏offsetof计算偏移量,为什么要存在内存对齐?最后了解结构体的传参文章干货满满!学习起来吧!...输出: 图解对比: 结构体传参 按值传递(传结构体) 函数形参声明为结构体,实参传递结构体变量。...printf("%d\n", s.x); } 输出: 按地址传递 函数形参定义为结构体指针,实参传递结构体变量的地址。...无论是传结构体指针还是传结构体地址,本质上都是传地址,但是传地址,只需要创建一个小的空间来存储地址。 选择传地址比较好一些。...总结: 结构体传参的时候,要传结构体的地址。 总结 这次阿森和你一起学习结构体的 结构体内存对齐,内存对齐包含结构体的计算,使用宏offsetof计算偏移量,为什么存在内存对⻬?
领取专属 10元无门槛券
手把手带您无忧上云