C语言之指针进阶

【C语言】——指针进阶 两万字长文,总结C语言指针的知识点 阅读详情
  1. 字符串常量放在rodata段,相同的字符串只占一份内存空间。
    所以:
int *p1 = "hello!";
int *p2 = "hello!";
if(p1 == p2)  //正确;

  1. &数组名 与 数组名
    数组名:数组首元素的地址;
    &数组名:整个数组的地址;
int arr[10];
int *p3 = arr;
int (*p4)[10] = &arr;
  1. 数组名在两情况下代表整个数组:
    sizeof(arr);
    &arr;
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d",arr);   //二维数组首元素的地址。也就是第一行整个一维数组的地址
printf("%d",arr+1);  //二维数组第二行的地址
printf("%d",arr[1]);  //第二行首元素的地址,也就是arr[1][0]的地址
printf("%d",arr[1]+1); //第二行第二个元素的地址
  1. 存放数组指针的数组
int (*p[5])[4];

先找变量p[5]为数组;
在看类型int(* )[4];数组指针

  1. 函数指针
    函数名代表函数的地址
    函数指针:指向函数的指针
void test()
{
	printf("hhh");
}

void (*p)() = test;
  1. 判断下面两个表达式
    1).((void ()( )) 0 )(); //调用地址为0处,不带有参数且返回值为void的函数
2)  .void ( * signal ( int ,  void ( * ) ( int ))) (int);  //signal是一个函数,他有两个参数,一个是int一个是函数指针,函数的返回值为函数指针
  1. 利用typedef进行类型重命名,将复杂类型简单化,以用于理解
typedef void(*Fun)(int);
Fun signal(int , Fun);
  1. 定义一个指向函数指针数组的指针;
int *p1; //定义一个指针
int (*p2[10])();//定义一个函数指针数组
int (*(*p3)[10])(); //指向函数指针数组的指针

p3是一个指针,指向一个数组,数组是函数指针类型的

  1. 附上函数指针数组(转移表)的一道例题:
#inclue<stdio.h>
int add(int a,int b)
{
	return a+b;
}

int sub(int a,int b)
{
	return a-b;
}

int mul(int a,int b)
{
	return a*b;
}

int div(int a,int b)
{
	return a/b;
}
int main()
{
	int (*p[4])(int,int) = {add,sub,mul,div};

	printf("%d",(*p[1])(10,20));
	return 0;
}
【C语言进阶】玩转指针——指针的高阶玩法! 文章目录前言一、字符指针二、指针数组1.引入库2.读入数据总结 前言 指针的主题,我们在初级阶段的《指针》章节已经接触过了,我们知道了指针的概念: 1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。 3. 指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。 4. 指针的运算 这个章节,我们继续探讨指针的高级主题 一、字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* 。 思考以下. 阅读详情

相关推荐

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

第九步:(设备工具箱—设备管理—鼠标依次点击通用TCP/IP父设备—西门子_ Smart200到设备窗口里面去)数据类型:第0位(指PLC地址变量小数点后面的位数,例如我地址是M0.0,那么在数据类型应填写通道的第00位)第十步:(鼠标双击打开通用TCPIP父设备0--[通用TCP/IP父设备]进入通信配置)通道地址:0(指小数点前面起始字节的地址,例如我地址是M0.0,那么应在通道地填写0)。第七步:(选择通用TCP/IP父设备,点击新增,右侧选定设备就会自动添加进去。

u010670857的博客 6715

bss,data,text,rodata,堆,栈,常量段

bss段: BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 它有什么特点呢,让我们来看看一个小程序的表现。 int bss_array[1024 * 1024] = {0}; int main(int argc, char* argv[]) {

michaelcao1980的专栏 2065

[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释

如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。此选项允许将纹理编码为特定格式(RGBM 或 dLDR,具体取决于平台)并通过后期处理步骤对纹理数据进行处理(推拉式扩张通道)。使用在3D模型的专业法线贴图。通用的纹理类型,一般在Material上的材质图片参数使用,比如漫反射、法线贴图这些。​​Compression​​:ASTC 6x6(移动端)或DXT5(PC)​​Compression​​:BC5(PC)或ASTC 6x6(移动端)

sky_smile_Allen的博客 2171

【c进阶】指针进阶(为零基础学者提供的详细讲解)

学习笔记

qq_73216106的博客 860

Lama:基于傅立叶卷积的分辨率鲁棒性大掩模修复

为了缓解修复网络和损失函数都缺乏有效的感受野这个问题,提出了大掩模修复(LaMa)。LaMa基于一种新的修复网络架构,该架构使用快速傅立叶卷积(FFC),具有图像范围的感受野;高感受野感知损失;大型训练掩码,释放前两个组件的潜力。

qq_44926214的博客 1416

第10章 shellcode实战:18 神级开源shellcode工具:donut

Donut是一款shellcode生成器,可将C/C++、C#生成的PE文件转换为shellcode文件,同时支持JS、XSL、VBS脚本转换为shellcode。以下“原生”EXE/DLL指非托管PE文件(包括并不限于C/C++、delphie等编写生成的可执行文件),可以直接由系统加载运行,区别于.Net生成的托管文件。被处理exe/dll为32位程序,则需要用32为的shellcode加载器启用,exe/dll为64位的就用64位shellcode加载器启用。

李小咖·网安技术库 2796

操作系统内存最全解析!!!(内附超全思维导图)

主存(RAM) 是一件非常重要的资源,必须要认真对待内存。虽然目前大多数内存的增长速度要比 IBM 7094 要快的多,但是,程序大小的增长要比内存的增长还快很多。不管存储器有多大,程序大小的增长速度比内存容量的增长速度要快的多。下面我们就来探讨一下操作系统是如何创建内存并管理他们的。 经过多年的研究发现,科学家提出了一种 分层存储器体系(memory hierarchy),下面是分层体系的分类 位于顶层的存储器速度最快,但是相对容量最小,成本非常高。层级结构向下,其访问速度会...

架构大数据双料架构师的博客 2266

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

Linux 进程控制块 PCB(process control block)

PCB(process control block) 可使用命令locate sched.h查看位置: /usr/src/linux-headers-4.15.0-107/include/linux/sched.h struct task_struct { 结构体 text段-代码段 text段存放程序代码,运行前就已经确定(编译时确定),通常为只读。 rodata段(read-only-data)-常量区 rodata段存储常量数据,比如程序中定义为const的全局变量,#define定义的常量,以及诸

阿渌的博客札记 1539

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用!Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。Gemini Pro的表现超越了其他同类模型,当前版本配备了 32K 文本上下文窗口,可免费使用,且其定价将十分有竞争力。Gemini Pro具备丰富的功能:函数调用、数据嵌入、语义检索、自定义知识嵌入以及聊天功能。

HJ_blog 1246

【WRF-GHG 教程上】完整教程(2024年更新版)

完整教程(2024年更新版)

WW、forever的博客 1432

【C语言进阶】指针的进阶【上篇】

本文讲解了指针的进阶中的字符指针,数组指针,指针数组,数组传参和指针传参等一系列的知识,图文并茂,让你可以看懂并且理解

你我皆为凡人的博客 1545

大数据知识面试题-Hadoop(2022版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 1万+

C语言指针进阶训练

对C语言指针的进一步学习,通过常见的进阶练习,能够帮助学者更加深刻的学习指针的实际操作与用法。

Hello_shuo的博客 2211

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

c语言指针进阶部分

我们在创建数组的时候,会给我们分配一块内存,同时这个数组有地址,地址就是首字符的地址,让我们去往里面去放东西,这一次我们放的是 hello world ,这个时候,我们又创建了一个数组,又会为我们分配一块内存,同时这个数组也有地址,让我们去往里面去放东西,这一次我们放的也是 hello world ,所以这两个数组里面的内容是一致的,但是地址不一样,我们比较的是数组名,数组名就是首元素的地址,就是比较地址。在这里我们打印的是函数的地址,我们可以看到加不加&取地址符号结果都是一样的,这是不是和数组差不多啊。

2402_84602321的博客 1869

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C语言——进阶指针理解

函数调用约定定义了函数在调用过程中参数传递、堆栈管理和返回值处理的规则。它确保了调用方(Caller)和被调用方(Callee)对函数调用的底层细节达成一致,避免因规则不匹配导致的程序崩溃或数据损坏。

Dfuen的博客 959

【C语言进阶】C语言指针进阶实战:优化与难题解析

在C语言的浩瀚宇宙中,指针无疑是那颗最为璀璨而神秘的星辰。它既是连接数据与操作的桥梁,也是让许多初学者望而生畏的迷宫。一旦掌握了指针的精髓,C语言的世界便仿佛被彻底点亮,编程的效率和灵活性得以质的飞跃。然而,仅仅停留在指针的基本使用上,远不足以探索其全部魅力与力量。指针的进阶应用,尤其是如何通过指针优化程序性能、解决复杂难题,是每一位C语言开发者必须攀登的高峰

EterNity_TiMe_的计算机学习之路 3190

c语言进阶 指针

指针数组是一种特殊的数组,其核心特点在于每个数组元素都是一个指针变量,这些指针可以指向不同的数据类型。&arr的存储类型&arr(*p)表示 p 是指针(*p)[5]表示 p 指向包含 5 个元素的数组表示数组元素为 int// 正确:p是指向包含5个int的数组指针// 正确:p1指向首元素(类型int*)// 错误:类型不匹配(int* 与 int (*)[5])// 错误:必须指定数组大小int* p1[5];// 指针数组:包含5个int*的数组。

ztztz111的博客 1728

【C语言】指针进阶【万字详细版】

进阶的指针有指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针等等,让我们来探讨指针的高级主题。

小明的博客 2366

【C语言】指针进阶(1)

数组指针是指针?还是数组?答案是:指针。整形指针——指向整形变量的指针,存放整形变量地址的指针变量。字符指针——指向字符变量的指针,存放字符变量地址的指针变量。数组指针——指向数组的指针,存放的是数组的地址。下面代码哪个是数组指针?int (*p)[10]是数组指针。

m0_73648729的博客 980

C语言——指针从初阶到进阶

本文讨论了关于指针的相关问题,欢迎大家阅读指针

2501_90507065的博客 6155

C语言进阶之路-数组与指针

本文细讲了打怪路上的数组和指针的特点和消灭方法,各位只需认真学习,即可消灭它们。祝各位都可爬上C语巅峰,斩尽拦路小妖。

志不在此,打卡留念 2374

C语言进阶——指针进阶

指针就是地址,而凡是存储在内存中的值都会有属于自己的地址,指针指向地址,这样我们就能通过指针间接操作变量。我们在指针初阶中介绍了指针的基本概念:如指针大小、野指针问题、指针间的关系运算等,在我们的指针进阶中,将会对指针进行进一步剖析,见识更深的指针!🎊🎊......

北 海的博客 2587

【C语言】指针的进阶

]的优先级 高于 * ,所以 要加上()来保证p 先和 * 结合。

加油!!! 1096

C语言进阶之指针的进阶

指针的进阶及面试题讲解

立志做一个高产且细节博主 976

【C语言进阶4——指针的进阶(1)】

指针的进阶(1)前言1、字符指针2、指针数组3、数组指针3.1 数组指针的定义3.2 &数组名和数组名的区别3.3 数组指针的使用3.3.1 在一维数组中使用3.3.2 在二维数组中使用总结 前言 本文开始学习指针进阶相关的知识点了。前面已经在初识C语言、C语言基础阶段学习过了指针的内容了: 【C语言——初识C语言(4)】13、指针 【C语言基础10——指针(1)】 【C语言基础11——指针(2)】 在基础阶段初步知道了指针的概念: 指针就是个变量,用来存放地址,地址唯一标识一块内存空间 指

taibudong1991的博客 4308
上一篇: C语言程序:单链表实现一元多项式相加(不带头节点)
下一篇: HTML常用标签集合
Young-_-D
博客等级 码龄8年 62粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值