首页
学习
活动
专区
工具
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.4K11

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.3K2218
  • 批处理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.2K20

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

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

    1.5K30

    C++入门

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

    5910

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

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

    1.7K30

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

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

    3.8K30

    从基础入门到学穿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++的语法支持函数重载

    82110

    C++:从C语言过渡到C++

    C++在C语言的基础上添加了面向对象编程的特性:封装、继承、多态。 随后几年,C++不断完善发展,在1998年推出了C++98,官方第一个较为完善的版本,引入了STL(标准模板库)。...2.namespace的作用 在C/C++中,变量、函数、类是大量存在的,这些名称在全局域中可能会重复从而引发冲突。...语法形式:类型& 引用的别名 = 引用对象 这里a、b、c、d都是共用一块内存空间的 2.引用的特性 1.引用的变量必须初始化。 2.一个变量可以多个引用。...; const int& rd = d;//类型转换产生的中间值也存放在临时变量中,也得用const引用 5.引用和指针 1.引用必须初始化,不开空间;指针存储变量地址,语法上可以不初始化(nullptr...//正确的宏实现 #define ADD(x, y) ((x) + (y)) // 为什么不能加分号? // 为什么要加外面的括号? // 为什么要加里面的括号?

    6300

    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 上也能运行 。 为什么??

    43140

    我也谈 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 — 我打趣地将它翻译为“大保健”。

    68620

    【C++】Chapter 0:当你学习C++之前首先需要了解的

    注:此文章主要介绍C++中的特征及基本语法问题。...C++ 继承了 C 语言的基本语法、数据类型、控制流、指针等特性,因此 几乎所有的 C 代码都能在 C++ 中编译运行(但某些情况例外,如 malloc/free 与 new/delete 混用可能会出错...C++ 扩展了 C 语言 C++ 在 C 的基础上添加了许多新的特性,使其支持更高级的编程范式,例如: C 语言 C++ 语言(扩展特性) 结构化(Procedural)编程 支持面向对象(OOP) 仅支持...需要给变量取别名(而不是指针) 需要函数参数的传递(避免了低效率的拷贝过程) 常量引用(不需要修改) 右值引用(用于移动语义) auto关键字 能根据右边的表达式自动推导左边变量的类型,常用于很长的类型的简写...nullptr C++ 中的空指针 nullptr 在 C++11 之前,空指针通常用 NULL 或 0 表示。

    7300

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

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

    16620

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

    从0开始更优雅 在《为什么程序员喜欢使用0 ≤ i 的形式写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++程序员经常问的11个问题

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

    86520

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

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

    98950

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

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

    23410

    C++ 炼气期之数组探幽

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

    27820

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

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

    3.6K30

    C语言复习概要(二)

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

    12110
    领券