代码编织梦想

指针函数

指针函数的概念:
本质上是一个函数,返回值类型是指针

char * func(){      //返回值类型是指针
    char *str = "hello";
    return str;   //返回了一个字符串指针
}       

注意 若返回值是在函数内部定义的变量则需要加static

char * func(){
    // 函数内定义的变量存储在栈区 栈区开辟的空间在当前代码段结束后即释放
    char str[100] = "hello";
    // 加static 存储在静态全局区 保留存储的内容
    static char str[100] = "hello";
    return str;
}

函数指针

函数指针的概念:
本质上是一个指针,保存的是函数的地址
我们定义的函数在程序运行时,会将指令加载到内存,所以函数也有地址
c语言中规定:函数名就是函数的首地址,即函数的入口地址,即可以用一个指针变量存储
这个指针变量,就是函数指针
函数指针的定义方法:
返回值类型(*变量名)(形参列表)

int (*p)(int,int);
// 定义了一个int返回值类型,变量名为p的函数指针
// 指向的函数必须有有两个int型参 返回值类型必须为int

调用函数指针时可以和调用普通函数一样 不需要加*

函数指针数组

函数指针数组的概念:
本质是一个数组,存储的每一个元素都是函数指针
函数指针数组的定义方式:
返回值类型(*变量名)(形参列表)

int (*p[10])(int,int);
// 定义了一个数组名为p的函数指针数组 
//其中每个元素都是int返回值类型,有两个int形参的函数指针

函数指针最常用的地方就是将一个函数作为参数传递给另一个函数的时候需要使用函数指针
一个函数作为参数传递给另一个函数 这个函数称之为回调函数
如下,定义加减乘除四个函数,用函数指针调用

int add(int a,int b){
    return a+b;
}

int sub(int a,int b){
    return a-b;
}
int mux(int a,int b){
    return a*b;
}
int dive(int a,int b){
    return a/b;
}
int process(int (*p)(int,int),int a,int b){
    return p(a,b);
}
int main() {
    int num;
    num = process(add,10,5);
    printf("add = %d\n",num);
    num = process(sub,10,5);
    printf("sub = %d\n",num);
    num = process(mux,10,5);
    printf("mux = %d\n",num);
    num = process(dive,10,5);
    printf("dive = %d\n",num);

}
输出结果:
	add = 15
	sub = 5
	mux = 50
	dive = 2

容易混淆的指针


 int *a[10];
这是个指针数组 数组中有10int类型的指针变量
int (*a)[10];
这是个数组指针 是个地址 占4个字节
int **p;
这是个指针的指针 保存指针变量的地址
int *f(void);
声明了一个指针函数 返回值类型为 int *
int (*f)(void);
这是一个函数指针变量 返回值类型是int 没有参数

特殊指针

空类型指针: void*
任何类型的指针都可以赋值给空类型指针变量
空类型指针在32位系统下 也占4个字节

空指针 : NULL
char *p=NULL;
p指向0x00 00 00 00这个地址 用来给指针初始化

main函数传参

int main(int argc,char *argv[])
argc:  表示从命令行终端输入的参数的个数
argv:  一个指针数组,保存命令行中每一个输入的参数

还没学到结构体,后续把结构体指针补上,然后两个文章整合到一起,上一篇c语言指针详解可点击跳转[学习笔记]C语言中关于指针的详解1
出门遛弯了 see you tomorrow~
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/limingyang12138/article/details/127833397

c语言指针的使用、字符串和指针详解(详细、易懂)_4907的博客-爱代码爱编程_字符指针和普通指针的区别在输入输出中的应用

C语言指针笔记 刚开始了解指针是从交换两个变量开始,但是总是断断续续地学,每次都在看交换两个变量的函数,上周在课上正式学了指针,看的时候感觉懂了,但是一上机就不知道指针怎么用、参数怎么传。于是想整理一下指针的学习笔记,再去

c语言学习笔记--c指针_yunfei_chen的博客-爱代码爱编程

C指针 通过指针,可以简化一些C编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,学习指针是很有必要的。 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址

【C语言学习笔记】指针作为函数参数传递地址详解-爱代码爱编程

1.值传递 #include <stdio.h> void swap1(int x,int y){ int t; t=x; x=y; y=t; } int main() { int a=1,b=2; swap1(a,b); printf("s1:a=%d,b=%d\n",a,b); return 0; } 显然,这是无

C语言指针用法详解-爱代码爱编程

声明: 本文摘自一篇大神做的文档,原文的名字是: 《C语言指针用法详解(宝典)》 这里是本人学习他的文章,抄写的笔记。并非本人原创。本文也不产生任何收益。 在底部放置本文的原版pdf的链接。 /**********************************************************************

【C语言初阶笔记重点】初识指针,详解!!-爱代码爱编程

目录 指针 指针是什么 指针和指针类型 指针+-整数 指针的解引用 野指针 野指针成因 如何规避野指针 指针运算 1.指针+-整数 2.指针-指针 3.指针的关系运算  指针和数组   二级指针 对二级指针的理解 对于二级指针的运算 指针数组 总结 指针 本篇内容主要讲解指针的概念,指针类型,指针的运算以及指针和数

linux中c语言结构体详解,Linux C语言结构体-学习笔记-爱代码爱编程

Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习。 预处理程序。 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 逻辑运算符: & | ^ ~ << >> 函数的递归调用方法 什么是预处理 vim helloworld.c

c语言获取指针分配的字节数,c语言数组和指针详解,学霸随堂笔记-爱代码爱编程

C语言数组和指针很多人都不能学的很懂,在这里看看学霸总结的笔记,可以帮助你学习。 1. 指针是什么 1》 内存地址编号: 0x00 00 00 00 ----0xff ff ff ff 2》 存储内存地址编号 C提供了指针这个基本数据类型来存储地址编号,占4字节 3》 数据结构的意义 操作内存的字节 2. 指针和指针变量的意义 希望通

C 语言中数据类型的作用是什么,嵌入式学习笔记:c语言基本数据类型详解-爱代码爱编程

今天就来跟着学霸来学一下基本数据类型学习点 逻辑类型 true false 0代表假 非0为真 整数类型 unsigned 无符号 signed 有符号 最高位为符号位 0为正,1为负编译器中默认为有符号 原码:符合人的逻辑思维的二进制数据,最高位为符号位 反码:正数的反码与原码相同,负数的反码:符号位保持不变,其余位取反补码:正数的补

12 C语言进阶指针详解-爱代码爱编程

指针的进阶 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题解析 声明:该文是学习C语言进阶时的笔记。学习内容:B站鹏哥C语言,p34-p51部分。文中有任何不懂的地方可以观看视频。 指针的基本概念 指针就是一个变量用来存放地址,地址是内存空间的唯一标识。指针的大小是固定的4或8字节

c语言指针详解_路溪非溪的博客-爱代码爱编程

 指针C语言指针详解(超级详细)_sycgogogo的博客-CSDN博客_c语言指针 C/C++中声明指针变量时星号是靠近变量名还是靠近类型?_weixin_34247155的博客-CSDN博客 指针定义的两种理解方法: int *p;     第一种:首先看到p,这个是变量名;其次,p前面有个*,说明这个变量p是一个指针变量;最后,*p前面有一

郝斌老师 c语言学习笔记_吢呢的博客-爱代码爱编程

文章目录 c语言概述C编程预备计算机专业知识基本的输入输出函数的用法printf() —— 将变量的内容输出到显示器上scanf()【通过键盘将数据输入到变量中】运算符流程控制【c语言的第一个重点】顺序选择ifif...else...补充:switch循环for注意:whiledo...whilebreak和continuebreakcontinu

c语言进阶 之 指针详解(2)_ted_ya的博客-爱代码爱编程

字符指针 指向字符的指针。 #include<stdio.h> int main() { char arr1[] = "abcdef"; char arr2[] = "abcdef"; char* p1 = "abcdef"; char* p2 = "abcdef"; if (arr1 == arr2) { printf

02-c语言的变量类型详解【个人学习笔记】_阿饕饕鬄的饕的博客-爱代码爱编程

前言          单片机的基本功能是进行数据处理,而数据在进行处理时需要先存放到单片机的存储器中。所以在编写程序时对变量与常量都要先声明数据类型,以便把不同的数据类型定位到嵌入式处理器的不同存储区中。         具有一定格式的数字或数值叫做数据,数据的不同格式叫做数据类型。数据类型是用来表示数据存储方式及所代表的的数值范围的。   据可变

[学习笔记]c语言中关于内存的详解_正当梨花开满天涯的博客-爱代码爱编程

[学习笔记]c语言中关于内存的详解 什么是内存C语言中内存分区模型动态分配内存的概述静态分配内存的概述动态内存函数 malloc动态内存函数 free动态内存函数 calloc动态内存函数 relloc内存泄漏

c语言指针数组和数组指针详解-爱代码爱编程

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序

【鹏哥c语言网课笔记】指针的详解-爱代码爱编程

目录 1. 字符指针 2. 指针数组 3. 数组指针 4. 数组传参和指针传参 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 1. 字符指针 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。

c语言进阶 之 指针详解(3)-爱代码爱编程

函数指针 是指向函数的指针,存放函数地址。 #include<stdio.h> int ADD(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a = 10; int b = 20; printf("%p\n", &ADD); p

[学习笔记]c语言中关于指针的详解1-爱代码爱编程

[学习笔记]C语言中关于指针的详解 1 什么是指针指针变量指针的类型指针的定义指针的运算符数组的指针指针的运算指针数组指针的指针字符串和指针数组指针指针与函数的关系 什么是指针 操作系统给每个

c语言学习记录——이십구 指针详解(2)_int i , a [1鞚碷=(1,2,3,4,5,6,7,8,9,10),* p [2]; for-爱代码爱编程

目录 一、数组参数、指针参数 一维数组传参 二维数组传参 一级指针传参 二级指针传参 二、函数指针 三、函数指针数组 用途:转移表 四、回调函数 五、指向函数指针数组的指针 一、数组参数、指针参数 在写代码时难免要把数组或者指针传给函数,那函数的参数该如何设计呢? 一维数组传参 void test(int arr[]) vo