每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。
1 |
|
结果:
1 | var1 变量的地址: 0x61fe1c |
每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。
1 | #include <iostream> |
结果:
1 | var1 变量的地址: 0x61fe1c |
C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。
1 | int * myFunction() |
注意:C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
C++ 中可以通过指定不带索引的数组名来传递一个指向数组的指针。
C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。
如果想要在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,也可以传递一个多维数组作为形式参数。
形式参数是一个指针:
1 | void myFunction(int *param) |
形式参数是一个已定义大小的数组:
1 | void myFunction(int param[10]) |
形式参数是一个未定义大小的数组:
1 | void myFunction(int param[]) |
数组名是指向数组中第一个元素的常量指针。
声明:
1 | double runoobAarray[50]; |
runoobAarray
是一个指向 &runoobAarray[0]
的指针,即数组 runoobAarray
的第一个元素的地址。
因此,下面的程序片段把 p 赋值为 runoobAarray
的第一个元素的地址:
1 | double *p; |
使用数组名作为常量指针是合法的,反之亦然。因此,*(runoobAarray + 4)
是一种访问 runoobAarray[4]
数据的合法方式。使用 *p、*(p+1)、*(p+2)
等来访问数组元素。
C++ 支持多维数组。多维数组声明的一般形式如下:
1 | type name[size1][size2]...[sizeN]; |
例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组:
1 | int threedim[5][10][4]; |
C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main()
,所有简单的程序都可以定义其他额外的函数。
C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat()
用来连接两个字符串,函数 memcpy()
用来复制内存到另一个位置。
break 语句 终止循环或 switch
语句,程序流将继续执行紧接着循环或 switch
的下一条语句。
continue 语句 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
1 | #include <iostream> |
.
(点)运算符和 ->
(箭头)运算符用于引用类、结构和共用体的成员。
点运算符应用于实际的对象。箭头运算符与一个指向对象的指针一起使用。
实例:
1 | struct Employee { |
(.)点运算符
下面的代码把值 zara
赋给对象 emp
的 first_name
成员:
1 | strcpy(emp.first_name, "zara"); |
(->)箭头运算符
如果 p_emp
是一个指针,指向类型为 Employee
的对象,则要把值 zara
赋给对象 p_emp
的 first_name
成员,需要编写如下代码:
1 | strcpy(p_emp->first_name, "zara"); |
sizeof
是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。
sizeof
运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。
使用 sizeof
的语法如下:
1 | sizeof (data type) |
其中,data type
是要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。
实例:
1 | #include <iostream> |
结果,结果会根据使用的机器而不同:
1 | Size of char : 1 |
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。
C++ 程序中可用的存储类:
从 C++ 17 开始,auto
关键字不再是 C++ 存储类说明符,且 register
关键字被弃用。
C++ 允许在 char
、int
和 double
数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。
下面列出了数据类型修饰符:
修饰符 signed
、unsigned
、long
和 short
可应用于整型,signed
和 unsigned
可应用于字符型,long
可应用于双精度型。
修饰符 signed
和 unsigned
也可以作为 long
或 short
修饰符的前缀。例如:unsigned long int
。
C++ 允许使用速记符号来声明无符号短整数或无符号长整数。可以不写 int
,只写单词 unsigned
、short
或 unsigned
、long
,int
是隐含的。