C/C++中*和&的用法详解

C++中&和*的用法一直是非常让人头疼的难点,课本博客上讲这些知识点一般都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱,在网上找到了一篇英文文章简单总结了这两个符号的一些用法,都是一些比较基础的知识,我比较关心的函数指针,指针函数等都没有涉及到,今后有时间把这部分学明白整理出来。

C/C++中*和&的用法

C++语言是C语言的超集。几乎所有可以运行的C程序都是可以运行的C++程序。因此,写一个不包含C++特性的C++程序是可能的,尽管cout和引用的使用(见下文)更好的构成了一个C++程序。C++和C在代码格式上偶尔会有不同,比如,在C语言中,我们这样把p声明为一个int类型的指针 int *p,而在C++中我们使用int* p(编译器并不在意你使用的是哪种格式)。

在C/C++中,*和&有很多用法,具体的使用要根据代码内容来确定。

C中*的用法

(a) 乘法运算:x=y*z;

(b) 乘法赋值运算:x*=y;相当于x=x*y

(c) 注释:/*这里是你的注释*/

(d) 指针的声明:int *p 或 int* p; 读法:p是指向一个整数类型的指针。

(e) 复合指针: int **p; 或 int** p; 读法 p是一个指向一个指向整数类型的指针的指针。(同样道理, int***p等等)

(f) 解引用: x=*p 把指针p指向的值赋值给x

&在C语言中的用法

(a) 逻辑与:if((a>1)&&(b<0))

(b) 位运算与:x=a&b;

(c) 逻辑与赋值:x&=y;与 x=x&y含义相同

(d) 求地址运算符:p=&x;读法:把x的地址赋给p(指针)

C++中&的补充用法

C++中有一种C不存在的变量类型引用变量(简单说来为引用),尽管在C语言中用指针也可以实现类似的功能。

引用,指针,地址是联系密切的概念。地址是在电脑内存中的地址(一般是一些变量的值在内存中的储存位置),指针是存地址的变量,所以指针可以“指向”内存地址。概念上讲,引用变量本质上是指针的另一个名字(但是并不能被编译器实例化)

在函数内像其他变量一样定义一个引用是可能的;举例

void main(void)
{
int i;
int& r = i;
...
} 

但是这是没有意义的,因为引用的使用和对引用的变量的使用是一样的。

引用在函数的参数中被使用。

void main(void)
{
int i=3;
f(i);
cout << i;
}
void f(int& r)
{
r = 2*r;
} 

这段程序输出“6”(2*r使被r引用的变量加倍,也就是指i)

在C语言中,实现同样的功能,我们可以通过声明f()为void f(int *r),其中r是指向整数类型的指针,然后调用参数&i(i的地址)调用函数f(),在函数f()内使用r的解引用,但是显然,C++提供了一种更简明的通过引用的方式向函数传值,从函数中返回值。

您可能感兴趣的文章:

  • c++ *运算符重载
  • C++中引用(&)的用法与应用实例分析
(0)

相关推荐

  • C++中引用(&)的用法与应用实例分析

    对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法. 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用,可以使程序简洁.高效.我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源.故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起

  • c++ *运算符重载

    运算符重载,对象和指向对象的指针 直接上code 复制代码 代码如下: #include <iostream> using namespace std;  class test {     public:         int a;         test() : a(0){}         test &operator*(){             cout << "operator*" << endl;             c

  • 基于C++中setiosflags()的用法详解

    cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2); setiosflags 是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是执行由有参数指定区域内的动作:   iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧:   iso::right 也是se

  • Angular 中 select指令用法详解

    最近在angular中使用select指令时,出现了很多问题,搞得很郁闷.查看了很多资料后,发现select指令并不简单,决定总结一下. select用法: <select ng-model="" [name=""] [required=""] [ng-required=""] [ng-options=""]> </select> 属性说明: 发现并没有ng-change属性 ng-

  • java 中 ChannelHandler的用法详解

    java 中 ChannelHandler的用法详解 前言: ChannelHandler处理一个I/O event或者拦截一个I/O操作,在它的ChannelPipeline中将其递交给相邻的下一个handler. 通过继承ChannelHandlerAdapter来代替 因为这个接口有许多的方法需要实现,你或许希望通过继承ChannelHandlerAdapter来代替. context对象 一个ChannelHandler和一个ChannelHandlerContext对象一起被提供.一个

  • Java中isAssignableFrom的用法详解

    class1.isAssignableFrom(class2) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口.如果是则返回 true:否则返回 false.如果该 Class 表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true:否则返回 false. 1. class2是不是class1的子类或者子接口 2. Object是所有类的父类 一个例子搞定: package com.auuz

  • php 中的closure用法详解

    Closure,匿名函数,是php5.3的时候引入的,又称为Anonymous functions.字面意思也就是没有定义名字的函数.比如以下代码(文件名是do.php) <?php function A() { return 100; }; function B(Closure $callback) { return $callback(); } $a = B(A()); print_r($a);//输出:Fatal error: Uncaught TypeError: Argument 1

  • JavaScript中eval()函数用法详解

    eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 复制代码 代码如下: eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eva

  • C# 中string.split用法详解

    第一种方法 string s=abcdeabcdeabcde; string[] sArray=s.Split('c') ; foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 第二种方法 我们看到了结果是以一个指定的字符进行的分割.使用另一种构造方法对多个字 符进行分割: string s="abcdeabcdeabcde"; string[] sArray1=s.

  • JS、jQuery中select的用法详解

    1.js var obj=document.getElementById(selectid); obj.options.length = 0; //清除所有内容 obj.options[index] = new Option("three",3); //更改对应的值 obj.options[index].selected = true; //保持选中状态 obj.add(new Option("4","4")); "文本",&

  • JS中Attr的用法详解

    具体代码如下所示: <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#btn").click(function(){ //使用attr(name)获取属性值: alert(

  • C++中this指针用法详解及实例

    C++中this指针用法详解及实例 概要: 本文简单介绍this指针的基本概念,并通过一个实际例子介绍this指针用于防止变量命名冲突和用于类中层叠式调用的两个用法. this指针概览 C++中,每个类 对应了一个对象,每个对象指向自己所在内存地址的方式即为使用this指针.在类中,this指针作为一个变量通过编译器隐式传递给非暂存(non-static)成员函数.因为this指针不是对象本身,因此sizeof函数并不能用于确定this指针所对应的对象大小.this指针的具体类型与具体对象的类型

随机推荐