首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言篇】深入探究 C 语言指针:揭开指针变量与地址的神秘面纱

引言 指针是 C 语言的核心概念之一,也是程序员必须掌握的关键技能。它不仅是 C语言的灵魂,还在操作系统、硬件驱动等底层开发中有广泛的应用。...指针是 C 语言中特殊的变量,它的值是另一个变量的内存地址。与普通变量不同,指针并不存储直接的数值,而是指向存储该数值的位置。...绘制变量 var 所在内存单元,其值为 100。 绘制指针 ptr,其值为 var 的地址,箭头指向 var。 2.2 指针的声明与初始化 声明指针时必须指明其指向的变量类型。...在 C 语言中,指针和函数结合使用是高效编程的核心。 5.1 指针作为函数参数 通过指针传递参数可以避免拷贝整个数据结构,从而提高效率。典型应用场景是交换两个变量的值。...修改头节点无需返回新地址,简化操作。 7. 指针与动态内存分配 在 C 语言中,动态内存分配允许程序根据需要分配和释放内存,提高了内存的利用率。使用动态内存分配时,指针是关键。

25110

【C语言】变量

博客之星TOP100|TOP63、阿里云专家博主、掘金优秀创作者、全网粉丝量6w+、全网访问量80w+ 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠ 个人主页:謓泽的博客  专栏系列:【C】...return 0; } void Var_Def() { int a = 0, b = 0, c = 0; char e = 0, f = 0, d = 0; float...main(void) { Var_Use(); //变量的使用 return 0; } void Var_Use() { int a = 4, b = 2, c = 8;...d\n", a, b, c); printf("%c %c %c\n", e, f, d); printf("%f %lf\n", fxs, dxs); }          运行结果...右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

15910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言里面的内存函数

    1.memcpy函数 (1)函数的模拟实现,这个函数的作用就是把arr1拷贝到arr2里面,单位是字节,20字节就是5整 数,所以输出的就是1234500000; (2)之所以强制类型转换成为char*...是因为这个类型的单位是字节,他的力度更加的细致; (3)循环里面的加上1就会只移动一个字节,4次循环才拷贝1个整数; 2.memmove函数 主函数 int main() { int arr1[] =...因为不同的位置,拷贝的方式可能导致原 来的数据被覆盖掉 (3)这里的逻辑就是目的地在源头的前面就从前向后进行,目的地在源头的后面就从后向前进行 这个在后面是之间有交集,如果毫不相干的话就2种方式都可以;else里面的加上...num就是找到最 后的位置向前拷贝; 3.memset函数 (1)函数就是实现重置,以字节作为单位,给的参数是起始地址arr,1是把范围内的元素都从0变成1,40就是范围,即40个字节,也就是10个整数...,就是整个数组; 4.memcmp函数 (1)字符串的比较:⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节;我们这里相当于 全部比较; (2)前面的2个参数分别是指向的地址,从这2个位置开始比较

    5710

    【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )

    文章目录 一、变量修改 1、直接修改变量 2、通过内存地址间接修改变量 3、通过指针间接修改变量 一、变量修改 ---- 访问 变量 , 就是 访问 内存空间 ; 访问 指的是 读写 内存 ; 修改变量的方式...: 直接修改 : 通过 变量 , 可以 直接 修改内存 , 间接修改 : 通过取地址符 , 拿到变量所在内存的 地址编号 , 通过地址编号修改内存 ; 1、直接修改变量 #include 变量值 , 以及 a 的地址 // a=1, &a=6422220 // a 是内存地址 6422220 位置的 4 字节内存标号 printf("a=%d, &a=%d\...&a); // 间接修改 : // 获取 变量 a 的地址 , // 直接修改该地址对应的内存空间中的数据 *( &a ) = 2; printf("a=%d...d, &a=%d\n", a, &a); // 间接修改 : 通过内存地址 // 获取 变量 a 的地址 , // 直接修改该地址对应的内存空间中的数据 *( &a )

    1.3K10

    c语言里面预处理的用法

    昨天分享了c语言里面的共用体、大小端模式、枚举的用法,今天我们来继续分享c语言里面预处理用法。争取在年假期间给大家分享完c语言里面的一些基本用法。...想必每个稍微写过一点c语言程序的都会写到如下面代码所示,这个就是表示预处理(主要是这个"#"符号): #include 2、理解一个我们自己写的一个程序到可执行程序的详细过程:...4、C语言预处理代码实战: (1)、#include(#include 和#include ""的区别),我们先来看下面的代码演示,我先在root@ubuntu-virtual-machine:/mnt...@ubuntu-virtual-machine:/mnt/hgfs/day# 然后我们在test.h里面定义的了两个数据类型int a 和float b,接着我在hello,c里面引用它,分别用"test.h...include 和 #include""的区别:专门用来包含系统提供的头文件(就是系统自带的,不是程序员自己写的,所以上面我写的那个就会报错),""用来包含自己写的头文件;更深层次来说:的话C语言编译器只会到系统指定目录

    69310

    C语言(数据和变量)

    这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注+收藏,欢迎欢迎~~ 个人主页:小羊在奋斗 所属专栏:C语言...C语言标准规定:sizeof(long)>=sizeof(int)。...我更喜欢把这个过程理解为:我们向存储器申请了一个空间来存放变量,但是我们并没有存进去一个值,导致这个空间里面是空的,编译器来这个空间找值的时候什么都没找到,所以也就无法打印。...还是来实验下验证这句话: 2.4全局\局部变量存储的地址 全局变量和局部变量在内存中存储在哪里呢?...一般我们在学习c\c++语言的时候,我们会关注内存的三个区域:栈区、堆区、静态区。 其实内存区域的划分会更加细致,这里我们也是只简单的了解一下。

    6710

    初识C语言——常量、变量

    不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。...5.常量 C语言中的常量和变量的定义的形式有所差异。 C语言中的常量分为以下以下几种: 字面常量 const 修饰的常变量 #define 定义的标识符常量 枚举常量 1....const 修饰的常变量在C语言中只是在语法层面限制了该变量不能直接被改变,但是本质上还是一个变量,所以叫常变量。...为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。...FEMALE); printf("%d\n", SECRET); enum Sex s = MALE; //注:枚举常量的默认是从0开始,依次向下递增1的 return 0; } 以上就是对C语言中常量和变量的介绍

    38410

    C语言变量与常量

    跟着肯哥(不是我)学C语言的变量和常量、跨文件访问、栈空间 栈空间还不清楚,期待明天的课程内容 C变量 变量(Variable)是用于存储和表示数据值的名称。...主要包括四个环节:定义、初始化、声明、使用 在我刚学C语言的时候,看的网课就专门强调了定义、声明和初始化。 在看这次学习营内容的时候,我对这些内容也已经很模糊了。...变量名(Variable Name)是给变量起名称,用于在程序引用该变量:由字母、数字、下划线组成,首字符不能是数字,不能与C语言内置关键字重名。...C语言内置关键字是不包含malloc的。因为学数据结构的时候经常用到,我之前以为它是的。 初始值(Initial Value)是可选的,用于给变量赋予一个初始值。...file1.c #include "shared.h" int x = 10; 在其他源文件中包含头文件,即可访问(使用)该变量: // file2.c #include "shared.h" //

    19820

    C语言 | register定义变量

    例89:学习C语言register定义变量的用法。 解题思路:register这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对。...因为,如果定义了很多register变量,可能会超过CPU的寄存器个数,超过容量。...C语言源代码演示: #include//头文件  int main()//主函数  {   register int i;//定义寄存器变量    int temp=0;//定义整型变量...以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C语言学习路线     C语言开发工具 更多案例可以go公众号:C语言入门到静通

    2.6K32

    8.2 C语言指针变量

    3、一个变量的指针的含义包括两个两个方面,一是以存储单元编号表示的地址,一是它指向的存储单元的数据类型(如int,char,float等)。...5、指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。 02怎样引用指针变量 1、给指针变量赋值。如:p=&a;指针变量p的值是变量a的地址,p指向a。 2、引用指针变量指向的变量。...如:printf(“%o”,p);作用是以八进制形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,即&a。 4、&取地址运算符。&a是变量a的地址。...5、*指针运算符,*p代表指针变量p指向的对象。 03指针变量作为函数参数 1、函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。...3、函数调用可以得到一个返回值,而使用指针变量作参数,可以得到多个变化了的值。 C语言 | 函数实现输出I love you 更多案例可以go公众号:C语言入门到精通

    1.3K2625

    C语言 | register定义变量

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例89:学习C语言register定义变量的用法。 解题思路:register这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对。...因为,如果定义了很多register变量,可能会超过CPU的寄存器个数,超过容量。...C语言源代码演示: #include//头文件 int main()//主函数 { register int i;//定义寄存器变量 int temp=0;//定义整型变量

    2.5K32

    C语言 | 结构体变量

    C语言结构体类型 C语言中允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。在其他一些高级语言中称“记录”。...C语言如何定义结构体类型变量 先声明结构体类型,再定义该类型的变量 在定义了结构体变量后,系统会为之分配内存单元。根据结构体类型中包含的成员情况,在Visual C++中占63个字节。...C语言结构体变量的初始化和引用 在定义结构体变量时可以对它的成员初始化,初始化列表是用花括号括起来的的一些常量,这些常量依次赋给结构体变量中的各成员。...对结构体变量的成员可以像普通变量一样进行各种运算,同类的结构体变量可以互相赋值。 可以引用结构体变量的成员的地址,也可以引用结构体变量的地址,结构体变量的地址主要用作函数参数,传递结构体变量的地址。...100道C语言源码案例请去公众号:C语言入门到精通

    2.7K10

    C语言之指针变量

    , 例如 指针变量是int类型, 那么将来就只能保存int类型变量的地址 3、* : 标示这是一个指针变量,代表访问指针变量指向的那一块存储空间 4、指针变量只能存储地址...,但是不能重新赋值新变量地址   4、指向常量的常量指针:有2个const修改,既不能间接修改变量的值,也不可重新赋值新变量地址 验证示例代码: //1、指针变量,指针变量可间接修改值,指针变量也可重新赋值新变量地址...a), sizeof(ap)); //测试1:a=12, a地址:5fbff65c, *ap=12, ap地址:5fbff650, ap保存的地址:5fbff65c //变量a占用字节个数...=50, b地址: 5fbff64c, bp保存的地址:5fbff64c, *bp: 88 /* 这个地方有点奇怪,b是常量,指针变量bp指向b, 间接通过指针bp修改变量的值,...而指针变量bp可以修改指向地址里面的值。 不知这样理解是否正确?

    2.1K30

    C语言 | auto定义变量

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例88:学习使用C语言auto定义变量的用法。 解题思路:auto自动存储类型,一般我们很少在程序中显示申明变量为auto类型。...因为代码块中的变量缺省情况下就是这种类型,这种类型的变量存放于堆栈中,也就是说只有程序执行这些代码块时这种自动变量才会被创建,代码块执行结束后自动变量便被释放。...C语言源代码演示: #include//头文件 int main()//主函数 { int i,num;//定义整型变量 num=2;//赋初值 for (i=0;

    2.3K42

    C语言内存地址基础

    从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。...但前面的类比是一种讨论C语言内存的简单方式。 如果对『指针』、『地址』和『逆向引用』感到混乱,请看《C语言指针5分钟教程》。...将字符的地址-1是改地址前的地址,而将int型地址-1是该地址前4个的地址。 在例子中,我们是用地址操作符来获取变量的地址,这和使用表示变量地址的指针是一样的效果。...数组地址 在C语言中,数组是相邻的内存区域,它存储了大量相同数据类型的值(int、long、*char等等)。很多程序员第一次用C时,会将数组当做指针。那是不对的。...这里的数组有5个int型变量,每一个占用4字节,因此整个数组大小为20字节。 结构体地址 在C语言中,结构体一般是连续的内存区域,但也不一定是绝对连续的区域。

    2.6K80

    【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )

    文章目录 一、数组相关地址 1、数组首元素地址 2、数组地址 二、代码示例 一、数组相关地址 ---- 数组首元素地址 与 数组地址 值相等 ; int array[10]; 其中 array + 1...的值是 array 地址 加上 4 字节 ; 其中 &array + 1 的值是 array 地址 加上 40 字节 ; 1、数组首元素地址 数组首元素地址 : 数组名 , 就是 数组元素首地址..., 该值 是一个常量 , 不能被修改 , 一定程度上 等同于 常量指针 ; 数组名 常量 : 变量 本质 是 内存空间别名 , 一旦变量被声明 , 就必须为该变量分配对应内存 , 内存一旦分配 , 就是固定的...; 如 : 在函数中定义 如下 局部变量 , 该数组一旦声明 , 就可以知道这是一个 40 字节的内存 , 已经在 栈内存分配完毕 , 数组的地址肯定就不能修改了 ; int array[10];...2、数组地址 数组地址 : 下面的数组张红 ,&array 是数组的地址 ; int array[10]; 二、代码示例 ---- 代码示例 : #include #include

    9.5K21

    【C语言】全局变量与局部变量

    一.C语言中的变量 如图,在我们初学C语言时会遇到如下两种变量: 在main函数外声明的叫全局变量, 在main函数内声明的叫局部变量....二.全局变量 全局变量是在函数外部声明的变量,也可以在函数内部使用。 全局变量在程序的任何地方都可以访问,包括函数内部和外部。 全局变量的作用域从声明处开始,直到文件的末尾。...全局变量在整个程序的执行过程中都存在,直到程序结束。 三.局部变量 局部变量是在函数内部或代码块内部声明的变量。...四.全局变量和局部变量的区别 局部变量和全局变量之间的主要区别如下: 作用域:局部变量的作用域仅限于声明它们的函数或代码块,而全局变量的作用域从声明处开始,直到文件的末尾,可以在程序的任何地方访问。...访问限制:全局变量可以被程序中的任何函数访问和修改,而局部变量只能在声明它们的函数内部访问。 在使用变量时,需要根据需求选择局部变量或全局变量。

    88610
    领券