C基础08天--指针和函数

指针与函数
1、指针与函数的返回值

2、指针和函数的参数

函数传参的两种方式:
传值和传址
如果是传值,在被调函数内部不能改变主调函数变量的值。
如果是传址,在被调函数内部可以通过地址来操作外部的变量。

3、函数指针
指向函数的指针
函数名称本身就是一个函数指针。
比如:int (*p_func)(int)
第一个int是返回值,p_func函数指针的名称,(*p_func) 考虑到匹配优先级问题,要加括号,第二个int是函数指针对应函数的参数。
函数指针的意义,从内存中找到需要执行的代码对应的首地址,

注意,函数指针的类型要与其指向的函数原型相吻合

通过函数申请与释放内存
1、    malloc
2、    realloc
3、    calloc  申请内存后帮助我们初始化内存的内容,其余和malloc功能完全一样
4、    free 释放内存

应用:
回调函数
实现回调函数机制的流程:
A、    首先需要一个主调函数,他至少要有一个参数是函数指针。
B、    实现回调函数,回调函数的 函数原型必须要和主调函数中函数指针的类型相匹配
C、    根据业务需要或具体情况决定该传入哪一个函数指针。
时间: 2024-10-07 16:48:31

C基础08天--指针和函数的相关文章

你必须知道的指针基础-7.void指针与函数指针

一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针”. 因此void*只能表示一个地址,不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位. int nums[] = {3,5,6,7,9}; void* ptr1 = nums; //int i = *ptr1; // 对于void指针没法直接取值 int* ptr2 = (i

第八天:C基础之内存分配与函数指针

虚拟内存自上而下分为 堆栈段,数据段,代码段 , 堆栈段分为堆区和栈区 ,栈区从上往下分配内存,堆区从下往上分配内存 .数据段分为静态区和全局区.两者的作用域不同.代码段分为只读区和代码区 .最后还有bss区现在还不涉及. 六个区域的定义如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int number = 200; 5 6 int hello() 7 { 8 static int s = 400; 9 int n = 100

C语言基础学习6: 指向函数的指针

1.函数指针变量调用函数 1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 scanf("a=%d,b=%d",&a,&b); 16 c = max(a,b);

C基础--函数指针作为函数的参数

#include <stdio.h> int add(int a, int b) { printf("%d\t%d\n", a, b); return a+b; } char max_ch(char *str) { int max, i; max = 0; for (i = 0; str[i] != '\0'; i++) if (str[i] > str[max]) max = i; return str[max]; } int main1(void) { int r

C基础--指针与函数返回值

#include <stdio.h> #define A 0 int funcA(int a, int b) { return a + b; } /*把指针作为函数的返回值*/ int * funcB(int a, int b) { static int c = A; c = a + b; return &c; } /*通过函数进行内存的申请*/ /* * 参数:要申请的内存大小 * 返回值:申请好的内存的首地址 * 这是一种不好的方式 */ int * funcC(int size)

C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针类型 3)如何定义一个函数指针(指向一个函数的入口地址) [中级程序员 转 高级程序员的 必经之路] 1,函数类型做函数的参数 把函数的入口地址传过来,奇怪的效果:[多态就是这样] 函数指针 做 函数参数 思想剖析 1,数组指针语法梳理 回顾,如何定义数组数据类型: [email protected

C零基础视频-34-通过指针实现函数交换两个变量的值

目录 回顾:函数的值传递 使用指针交换两个变量的值 回顾:函数的值传递 因为函数的调用过程中,实参到形参是值传递,因此,改变形参,是无法影响到实参的: #include <stdio.h> void FakeSwap(int nArg1, int nArg2) { int nTemp = nArg1; nArg1 = nArg2; nArg2 = nTemp; } int main(int argc, char* argv[]) { int nValue1 = 100; int nValue2

go基础系列 第二章 go函数和指针

1. 函数 2.指针 一. 函数 二. 指针 先来看一段代码 var a int =2 var pa *int pa = &a *pa = 3 fmt.Println(a) 这里定义了一个int类型的变量a, 有定义了一个指针类型的变量pa, 让pa指向了a的地址. 然后修改了pa的值, 我们看看打印出来的a是什么: 结果: 3 下面开始描述指针 1. 指针也是一种变量, 指针变量的定义方式, 和普通变量的定义方式一样 2. go语言中的指针不能进行运算. 在c中,指针是可以运算的. 比如 &am

【C++基础 08】virtual析构函数的作用

在面向对象语言中,接口的多种不同的实现方式即为多态.c++可以使用virtual来实现多态. 如果不使用virtual的话,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态编联(也就是迟后绑定,运行的时候才确定调用哪个对象). 关于virtual的用法比较简单,不再复述,我们这次来看看virtual析构函数的作用. 1.示例 我们先来看一段代码: class A { public: ~A() { cout<<"~A(