首页 > 其他分享 >C语言——深入理解指针

C语言——深入理解指针

时间:2024-04-03 23:29:48浏览次数:18  
标签:变量 元素 数组名 C语言 地址 深入 数组 指针

1.数组名的理解

实数组名就是数组⾸元素(第⼀个元素)的地址,但是有两个例外: • sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节

&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)。

除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

2.使用指针访问数组

数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。

3.一维数组传参的本质

数组传参的本质是传递数组首元素的地址,所以形参访问的数组和实参是同一个数组。

形参的数组是不会单独再申请数组空间的,所以形参的数组是可以省略掉数组大小的。

4.二级指针

以此类推,三级指针的表示方法为int ** * p...

5.指针数组(是数组)

指针数组模拟二维数组:

上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。

6.字符指针变量

     

 

常量数据放在代码段中,不可更改。

这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域,当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。

7.数组指针变量(是指针)

去掉名字,剩下的就是指针类型

[ ]的优先级高于{ }

字符指针变量:char* p 存放的是字符变量的地址,能够指向字符数据的指针。

整形指针变量:int* p 存放的是整形变量的地址,能够指向整形数据的指针。

浮点型指针变量:float* p存放的是浮点型变量的地址,能够指向浮点型数据的指针。

...

数组指针变量:存放的是数组的地址,能够指向数组的指针

            

8.二维数组传参本质

⼆维数组起始可以看做是每个元素是⼀维数组的数组,也就是⼆维数组的每个元素是⼀个⼀维数组。那么⼆维数组的⾸元素就是第⼀⾏,是个⼀维数组。

二维数组的首元素地址就是第一行地址,第一行地址就是一维数组整个数组的地址,类型是数组指针类型。

⼆维数组传参本质上也是传递了地址,传递的是第⼀⾏这个⼀维数组的地址,

9.函数指针变量

代码分析:

typedef关键字

typedef 是⽤来类型重命名的,可以将复杂的类型,简单化。 typedef 与 define 的区别:

10.函数指针数组(函数指针类型的数组)

把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组。

标签:变量,元素,数组名,C语言,地址,深入,数组,指针
From: https://blog.csdn.net/2302_80250536/article/details/137113339

相关文章

  • 37.深⼊理解指针(2)
    1.数组名的理解intarr[10]={1,2,3,4,5,6,7,8,9,10};int*p=&arr[0];这⾥我们使⽤&arr[0]的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且是数组⾸元素的地址,我们来做个测试。#include<stdio.h>intmain(){intarr[10]={1,2,3,4,5,6,......
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......
  • 大学教材《C语言程序设计》(浙大版)课后习题解析 | 第九、十章
    概述    本文主要提供《C语言程序设计》(浙大版)第九、十章的课后习题解析,以方便同学们完成题目后作为参考对照。后续将更新第十一、十二章节的课后习题解析,如想了解更多,请持续关注该专栏。专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客​http://......
  • (译) 理解 Elixir 中的宏 Macro, 第三部分:深入理解 AST
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......
  • 【每日C语言】Day6——变量与操作符
    目录2.4变量4.1变量的创建4.2 变量的分类2.5算术操作符:+、-、*、/、%5.1+和-5.2 *5.3 /5.4%2.6赋值操作符:=和复合赋值6.1 连续赋值6.2复合赋值符2.7单目操作符:++、--、+、-7.1++和--7.1.1 前置++ 7.1.2 后置++7.1.3 前置--7.1.4 后置--7.2+和......
  • 从基础到高级,带你深入了解和使用curl命令(一)
    前言在网络通信和数据传输中,curl命令是一个功能强大且广泛使用的工具。它可以与各种协议进行通信,如HTTP、HTTPS、FTP等,并支持各种操作,如下载文件、发送请求、测试API等。本文将从基础开始,介绍curl命令的基本用法,然后深入探讨其高级功能和实用技巧。curl简介curl是常用的命令......
  • 从基础到高级,带你深入了解和使用curl命令(二)
    前言之前我们介绍了curl命令的请求网络,设置代理等操作,本文我们继续来介绍curl命令的操作,本文我们将会介绍curl命令中有关cookie的操作。获取cookie要获取服务器发送的Cookie,可以使用curl命令的-c选项,将Cookie保存到文件中。例如:curl-ccookiec.txthttp://www.baidu.com......
  • 0基础 三个月掌握C语言(16)
    ⽂件操作为什么使⽤⽂件?如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件什么是⽂件?磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈......
  • 深入iPhone GPU:探索其性能和架构
    摘要了解你的显卡对于在电脑上玩现代图形要求高的游戏非常重要。本文介绍了如何轻松查看你的显卡型号以及为什么显卡在玩电脑游戏时如此关键。引言随着电脑游戏的发展,现代游戏对硬件性能的要求越来越高。十年前发布的显卡已经无法满足当前游戏的需求。因此,了解你的显卡......
  • c语言---- 结构体
    1.怎么定义一个结构体:1.struct这个变量名就是跟电脑说明,我是一个结构体。2.在struct后面的名字是要大写开头的。3.在大括号结束了,一定要加分号;​​2.结构体数组就是跟之前的数组一样的,就是名字前面的变量改成了结构的,还有里面的数,跟二维数组差不多:​​3.结......