不灭的火

革命尚未成功,同志仍须努力下载JDK17

作者:AlbertWen  添加时间:2025-06-16 17:52:37  修改时间:2025-06-18 10:33:27  分类:13.C/C++/仓颉  编辑

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

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

1. C中*的用法

  • (1)乘法运算:x=y*z;
  • (2)乘法赋值运算:x*=y;相当于x=x*y
  • (3)注释:/*这里是你的注释*/
  • (4)指针的声明:int *p 或 int* p 读法:p是指向一个整数类型的指针
  • (5)复合指针: int **p 或 int** p 读法 p是一个指向一个指向整数类型的指针的指针(同样道理,int***p等等)
  • (6)解引用: x=*p 把指针p指向的值赋值给x

2. C中&的用法

  • (1)逻辑与:if ((a>1)&&(b<0))
  • (2)位运算与:x=a&b
  • (3)逻辑与赋值:x&=y与 x=x&y含义相同
  • (4)求地址运算符:p=&x 读法:把x的地址赋给p(指针)

3. C++中&的补充用法

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

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

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

int main() {
    int i = 3;
    int &r = i;
    std::cout << i << std::endl;
}

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

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

#include <iostream>

void f(int &r) {
    r = 2 * r;
}

int main() {
    int i = 3;
    f(i);
    std::cout << i;
}

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

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

指针版:

#include <iostream>

void f(int *r) {
    *r = 2 * *r;
}

int main() {
    int i = 3;
    f(&i);
    std::cout << i;
}