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

C中的指针语法:为什么*仅适用于第一个变量?

C中的指针语法中,符号用于解引用指针,即获取指针所指向的变量的值。仅适用于第一个变量是因为指针的定义和使用方式决定了这一限制。

在C语言中,指针是一种特殊的变量类型,它存储了一个内存地址,该地址指向另一个变量的位置。通过指针,我们可以间接地访问和修改这个变量的值。

当我们使用*符号来解引用指针时,它告诉编译器去访问指针所指向的内存地址,并获取该地址上存储的值。这样,我们就可以读取或修改指针所指向的变量。

然而,符号仅适用于第一个变量是因为在C语言中,指针的解引用操作是从右向左进行的。这意味着,符号只会应用于紧跟在它之前的变量,而不是整个表达式。

例如,考虑以下代码片段:

代码语言:c
复制
int a = 10;
int* ptr = &a;
int b = *ptr;

在这个例子中,我们首先定义了一个整型变量a,并将其初始化为10。然后,我们声明了一个指向整型的指针ptr,并将其初始化为指向变量a的地址。最后,我们使用*符号解引用ptr,并将解引用后的值赋给变量b。

在这个过程中,*符号仅适用于ptr,因为它紧跟在ptr之后。它告诉编译器去访问ptr所指向的内存地址,并获取该地址上存储的值,即变量a的值。这个值被赋给变量b。

需要注意的是,符号的作用范围是有限的,它只适用于紧跟在它之前的变量。如果我们想对多个变量进行解引用操作,我们需要使用多个符号。

综上所述,C中的指针语法中,*符号仅适用于第一个变量是因为指针的解引用操作是从右向左进行的,它只会应用于紧跟在它之前的变量。这一限制是C语言本身的语法规定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 在函数 间接修改 指针变量 值 | 在函数 间接修改 外部变量 原理 )

文章目录 一、直接修改 和 间接修改 指针变量 值 二、在函数 间接修改 指针变量 值 三、在函数 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 值 ---- 直接修改 指针变量...return 0; } 执行结果 : 二、在函数 间接修改 指针变量 值 ---- 在 函数 间接修改 指针变量 值 , 将 指向一级指针 二级指针 变量 , 传递到 函数形参 ,...在 函数 , 使用 * 符号 , 修改 二级指针 指向 一级指针 变量值 ; 注意 : 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量...函数外部 变量 , 必须传入 指向该变量 指针才可以 ; 代码示例 : #include #include /* * 函数简介修改指针值 */ void...三、在函数 间接修改 外部变量 原理 ---- 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量 , 不能修改一级指针变量值 ; 这是因为

21.2K11

C++函数指针变量调用函数 | 求两个数大数

C++函数指针变量调用函数 在C++指针变量也可以指向一个函数,一个函数在编译时被分配给一个入口地址,这个函数入口地址就称为函数指针,可以用一个指针变量指向函数,然后通过该指针变量调用此函数。...指向函数指针变量一般定义形式为  函数类型 (*指针变量名)(函数形参表); 经典案例:C++求两个数大数。...    if(num1>num2)//如果num1大于num2    {     temp=num1;//把大赋值给temp    }   else   {     temp=num2;//把大赋值给...可以用一个指针变量指向max_Number函数,然后通过该指针变量调用此函数,定义指向max_Number函数指针变量方法是: int (*p)(int,int); C++函数指针变量调用函数 |...求两个数大数 更多案例可以go公众号:C语言入门到精通

2.2K2218
  • 批处理for循环中截取字符串_bat文件输出字符串

    比如:FOR /F %%z IN (‘set’) DO @echo %%z 这里我们代入变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz 至于前面的%~p这样内容就是语法了!...%%~zi pause %~$PATH:I – 查找列在路径环境变量目录,并将 %I 扩展 到找到第一个完全合格名称。...为什么会这样呢,还有一行c:\windows\teett呢?...只能适用于PATH变量,其他变量不行,如果要比较很多值,可尝试把值赋予给PATH变量,我没测试! 好了,FOR变量就介绍到这了!...下面为大家分享下实例: bat 批处理 字符串 替换函数 和 字符串截取函数 1、字符串替换 好了,符号说到这,现在说%PATH:str1=str2% 上面语法意思就是:将字符串变量%PATH%

    2.1K20

    fscanf读取一行字符串-C语言文件流(字节流) IO 操作(二) —— 初识“流”以及文件顺序读写(f

    (pfr); pfr = NULL;   注意:实际上每次在读取文件时候,文件指针一开始会指向第一个字符位置,每调用一次fgetc,文件指针就会向后移动一个单位。...4、二进制读写(fread/fwrite)   下面这两个函数是以二进制形式读写,不像上面的函数适用于所有流,适用于文件读写。   ...,那么第一个参数就是变量或者对象地址,第二个参数就是变量或者对象所占空间大小,第三个参数就是 1,因为变量或者对象只有一个。   ...(2) fread函数   fread函数 可以从一个文件读取二进制内容,也适用于读取文件。...,第一个参数就是用于接收数据变量地址,第二个参数就是变量字节大小,第三个参数就是1。

    1.4K30

    C++入门

    引用价值: 1、传参数 经典例子,在单链表尾插,如果链表为空,需要改变头节点,这时候就要用到二级指针去改变正在指向内容,但如果引用结点指针变量,不需要指针即可。...这也就验证了C++,引用不能替代指针,在Java语言中,引用是可以改变指向,所以在链表,如果用引用表示next指针,Java可以改变指向,指向另一个结点,在C++中就不行,因此C++引用和指针是相互配合关系...引用返回价值: 第一个价值:提高效率 传值返回时,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量一份临时拷贝,因此用值作为参数或者返回类型,效率是非常地下,尤其是当参数或者返回值类型非常大时...指针和引用区别: 在使用上和概念上区别 在语法上,引用没有开辟空间,但是指针开辟空间 在底层汇编语言上。两者原理是一样。 五、内联函数: 因为在C语言中,宏缺点太多! 宏本质上是替换!...内联函数优点不仅包含了宏函数缺点,还不用创建栈帧,如此优秀机制, 那为什么不把所有函数都变成内联函数呢? 内联函数只适用于函数代码量较小情况下(低于10行)。

    5510

    给 Python 程序员 C++ 简易入门指南

    传统 C 编程以打印 “Hello World!” 为初学者第一个程序。...赋值 赋值语法和 Python 类似: x = 4; 但是多重赋值(multi-assignment)是不允许: x, y = y, x 变量是不同 C++ 变量是一个有名字内存地址。...在这个例子我们可以看到改变两个指向相同对象不同名称变量一个,是否会影响到另一个变量值。...指针 指针对你来说可能是陌生,我们在这里将简要地提一下 —— 它们所需要篇幅远远超过我们在这里所能投入。在很多方面,指针是简单,但它简单也会让你陷入麻烦。指针只是一个持有内存地址变量。...在一个变量声明,星号 * 表示该变量是一个指针,类型表示该指针地址所对应对象类型。& 表示对象地址。例如: int A, *C = &A; 指针 C 存储着整型 A 地址。

    1.6K30

    数组不可以直接赋值,为什么结构体数组却可以?

    函数形参是数组情况 4. 为什么结构体数组可以复制 5. 参数传递和返回值 五、总结 一、前言 在 C/C++ 语言中,数组类型变量是不可以直接赋值。...C/C++ 语法规定在定义变量时候,是可以使用 操作符 = 来进行初始化操作。 2....,C 语言标准允许这种行为,是合法变量 a 所有内容(也就是这个变量占用过那一块内存空间中内容)会原样复制到变量 b 。...注意:代码在被编译成二进制文件之后,没有任何变量概念,全部是用地址来“传递” C/C++ 代码变量。 2....为什么结构体数组可以复制 有了前面的语法标准,这个问题似乎不用再讨论了~~ 赋值目的是什么?就是让一块内存空间内容,与另一块内存空间中内容完全相同。

    3.3K30

    从基础入门到学穿C++(C++语法基础篇)【超详细】【一站式速通】

    C++与C语言之间关系 C++兼容C语言语法。...,临时变量具有常性,所以需要加上const 权限缩小和放大规则:适用于引用和指针间。...范围for使用场景 使用范围for要提供精确范围对于数组而言,就是数组第一个元素和最后一个元素范围;对于类而言,应该提供begin和end方法,begin和end就是for循环迭代范围(底层基于迭代器实现...函数重载 C++支持重载,C语言为什么不支持 1、预处理:头文件展开、宏替换、条件编译、去掉注释 list.i test.i 2、编译:检查语法,生成汇编代码 list.s test.s 3、汇编:汇编代码转换成二进制机器码...而在g++环境编译时,添加了函数名修饰功能,比如说一个函数void Test(int a , double x),其函数名在调用时,被修饰成了,由此我们可以理解,为什么C++语法支持函数重载

    71510

    Java基础语法(一)——初识Java

    3.Java 特性 (作了解,在后面的学习我们会慢慢感受到) (1) 简单性   Java语法C++语法一个“纯净版本”。...这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。不仅如此,Java开发环境远远超出大多数其他编程语言开发环境。 (2)面向对象   什么是面向对象?...(4) 健壮性   Java与C++最大不同在于Java采用指针模型可以消除重写内存和损坏数据可能性(对于曾经花费几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java这一特性...:JAVA_HOME 变量值:值为JDK安装目录 2、变量名:Path 变量值:C:\Program Files\Java\jdk1.8.0_131\bin 3、配置CLASSPATH 变量名: CLASSPATH...跨平台性   意思是在windows 写代码 ,在Mac 上也能运行 。 为什么??

    42440

    我也谈 Box智能指针·实践领悟

    Box也是FFI按【引用】传值C ABI指针 — 即,它是Box::into_raw(Box) -> *mut T语法糖。...Box::from_raw(*mut T) -> Box )适用于由【场景一】+【场景二】构成“闭环”使用场景: Rust端 定义与导出FFI函数接口 定义与实例化FFI...端数据结构变量值(即, 数据结构在C端定义 变量值也在C端被实例化 )。...“消费”掉·原数据实例·所有权 — 【借入·检查器】将进一步禁止对该·变量·任何后续操作。 取出【堆·数据】原始指针 — 该指针是要被传输给C。...Rust端Borrow Checker也会开始“抱怨”任何对C变量值有【内存泄漏风险】操作语句。在Rust词典,对此有一个术语叫Hygienic — 我打趣地将它翻译为“大保健”。

    67720

    C语言数组与指针关系,使用指针访问数组元素方法

    数组与指针如果您阅读过上一章节“C语言数组返回值”内容,那么您是否会产生一个疑问,C语言函数要返回一个数组,为什么要将函数返回值类型指定为指针类型?...我们可以通过C语言寻址符“&”来返回数组变量存储在内存地址和数组变量第一个元素存储在内存地址,以及指针引用内存地址进行一个比较,如下实例代码:#include int main...:61fe10(不同计算机可能输出有所不同,但三个一般都是一样),也就是说,数组存储在内存地址或者说指针引用内存地址指向是数组第一个元素存储在内存地址。...换句话说,数组是一个指向该数组第一个元素内存地址指针。...使用指针访问数组元素也许通过数组元素索引直接访问数组元素会更直观一些,但使用指针访问数组元素也可以了解一下,语法如下:*(Array+n);其中n为索引值,这相当于Arrayn使用指针访问数组元素实例代码

    15320

    C++程序员经常问11个问题

    在运行时,C++创建一个值为2int类型临时变量,并传递它引用给f().这个临时变量和它引用从f()被 调用开始被创建并存在直到函数返回。返回时,就被马上删除。...C++会计算每个表达式,但完整“逗号分离”表达式结果是最右边表达式值。因此,当cin.good()返回true时,if条件值才是true。...直接访问原始内存、动态分配存储和最大限度发挥C++指令效率,都使你必须尽力避免有关内存bug。 要点5:避免使用复杂构造指向函数指针   指向函数指针C++可读性最差语法之一。...后则其实并不常用,因为类一般是不含有公共数据成员当用在继承用C代码时协调结构(struct)和类(class)时才会用到。    ...指向成员指针C++语法中最难以理解构造之一,但是这也是一个C++最强大特性。它可以让你调用一个类函数成员而不必知道这个函数名字。这 一个非常敏捷调用工具。

    86120

    【专业技术】你必须注意11个C++要点

    在运行时,C++创建一个值为2int类型临时变量,并传递它引用给f().这个临时变量和它引用从f()被调用开始被创建并存在直到函数返回。返回时,就被马上删除。...C++会计算每个表达式,但完整“逗号分离”表达式结果是最右边表达式值。因此,当cin.good()返回true时,if条件值才是true。...直接访问原始内存、动态分配存储和最大限度发挥C++指令效率,都使你必须尽力避免有关内存bug。 要点5:避免使用复杂构造指向函数指针 指向函数指针C++可读性最差语法之一。...后则其实并不常用,因为类一般是不含有公共数据成员当用在继承用C代码时协调结构(struct)和类(class)时才会用到。...指向成员指针C++语法中最难以理解构造之一,但是这也是一个C++最强大特性。它可以让你调用一个类函数成员而不必知道这个函数名字。这一个非常敏捷调用工具。

    98550

    漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?

    从0开始更优雅 在《为什么程序员喜欢使用0 ≤ i < 10这种左闭右开形式写for循环?》一文我们分析过,Dijkstra通过分析,得出在进行范围表达时候,使用左闭右开方式更加合理。...有了指针之后,我们可以使用int *pr = arr方式初始化一个指针,那么,这时候,指针pr也会指向数组内存空间第一个内存单元地址。...那有了数组和指针,想要使用这块内存第一个内存单元存储一个变量时候,就需要想办法表示这第一个空间。...因为指针*(p+0)这种表达形式0表示是偏移量,所以,无论数组下标从几开始,*(p+0)都是用于存取内存p+0位址值,也就是0X0000001这块内存单元值。...我最早学习几种编程语言(Algol, Fortran, Pascal)索引方式,有的是1-based,有的是从定义某个变量开始(variable-based indexing)。

    1.1K40

    C语言指针超详解——进阶篇

    字符指针变量指针类型我们知道有一种指针类型为字符指针 char* 。...所以上面代码意思是把一个常量字符串首字符 h 地址存放到指针变量 pstr 。 《剑指offer》收录了一道和字符串相关笔试题,我们一起来学习一下!...数组指针变量 2. 1 概念 之前我们学习了指针数组: 指针数组是一种数组,数组存放是地址(指针) 那么数组指针变量指针变量还是数组? 答案是:指针变量。...))(int); 所以说,上面的代码实际上是对函数 signal 声明,至于为什么不把整个返回类型放在函数名前面,是因为C语言语法要求(函数名放在 * 右边)。...typedef 同样适用于指针类型。

    4600

    C++ 炼气期之数组探幽

    数组会为每一个变量分配一个位置编号 。 可以通过变量在数组位置编号(下标)使用变量C++称数组为复合类型,复合类型指除了基本类型之外或通过基本类型组合而成新类型。...如果需要访问数组第一个变量数据,则如下代码可实现: int num[10]; cout<<num[0]<<endl; 正因为数组下标属性,数组通常借助循环语法结构进行整体遍历。...如下代码,初始化时只指定一个值且为 0 时,这里语义不是指给数组第一个变量赋值,而是为数组所有变量指定初始值为 0。...2.2.4 数组与指针 数组在内存存储结构有 2 个部分: 存储数组数据内存区域。 存储数组首地址内存变量。 数组名本质是指针变量,保存着数组首地址,也是第一个存储位置。...; } 了解指针特性后,也就不会奇怪为什么访问数组时能够越界。

    27320

    SWIG 官方文档第三部分 - 机翻中文人肉修正

    .. } 另一种适用于数组方法是使用 $1_basetype 替换。...下面的示例适用于 C#,并使用了 C# 章节记录一些类型映射方法名称,但它显示了一些可能语法变体。...11.16 C++“this”指针 所有 typemaps 讨论规则适用于 C ++ 以及 C。然而除了 C ++ 通过一个额外参数到每个非静态类方法-在此指针。...有时,将类型映射应用于此指针可能很有用(例如,在延迟之前检查并确保它为非空)。实际上,C 也有一个等效 this 指针,它在访问 C 结构变量时使用。...这适用于全局变量、成员变量和静态成员变量。在 C 包装变量时,这种方法当然是一种合乎逻辑方法。但是,在 C++ ,很可能在分配变量时抛出异常。

    3.6K30

    PHP关于foreach复制知识点总结

    这似乎是一个无关紧要区别,但它确实改变了foreach行为: 它现在将复制数组结构,而不是值(证明;如果你想知道这只是复制结构,比较一下这个和那个脚本。第一个只复制结构,第二个两个都复制)。...,它会复制,但如果它是在函数定义,它就不会复制了?...如果foreach在不复制数组结构情况下迭代数组,那么它不仅会改变函数array变量数组指针,还会改变函数外array变量指针。因此foreach需要复制数组结构(即散列表)。...数组结构,因为否则函数外部array变量数组指针会改变,而对value改变也会改变外部 总结 当且当迭代数组未被引用且具有refcount 1时,foreach将复制数组结构 foreach...还将复制数组值,前提是且当上一个点应用并且迭代是通过引用完成时

    99310

    C语言复习概要(二)

    函数参数传递 在C语言中,函数参数可以通过值传递和指针传递方式进行传递。...函数对参数进行修改不会影响主函数变量。...而在指针传递示例,modifyValue 函数通过指针修改了主函数变量值。 3.3. 函数返回值 函数可以返回各种类型值,包括基本数据类型、指针,甚至是结构体。...使用指针遍历数组 C语言中数组名其实是一个指向数组首元素指针,因此我们可以使用指针来遍历数组。...结论 本文详细介绍了C语言中数组与函数概念、基本语法、实际应用场景以及数组和函数结合使用方式。通过丰富代码实例,读者可以更好地理解和掌握这两个基础概念,并能够在实际项目中灵活应用。

    12110

    【小白学习C++ 教程】十、C++中指针和内存分配

    「@Author:Runsen」 指针 指针是保存内存位置地址变量。我们知道声明所有变量在内存中都有一个特定地址。声明一个指针变量来指向内存这些地址。...声明指针变量一般语法是: int p, *ptr; //声明变量p和指针变量ptr p = 4; //赋值4给变量p ptr = &p; //将p地址分配给指针变量ptr 在内存,这些声明将表示如下...当地址变量分配给指针变量时,它指向变量如上图所示。 由于 ptr具有变量 p 地址,*ptr 将给出变量 p 值(指针变量 ptr 指向变量)。 为什么需要 C++ 指针?...「C++ 中使用指针动态内存分配:」 在堆部分分配内存发生在运行时,而不是在编译时,因此分配堆内存称为动态内存分配。 一般来说,C++不会在堆中分配一个内存,因为在使用指针时通常会遇到复杂性。...int *ptr = new int[20]; // 上面的语句为int类型20个整数连续动态分配内存,并返回指向序列第一个元素指向“ptr”指针

    47730
    领券