【C++】函数指针 ② ( 数组类型基本语法 | 数组语法 | 数组首元素地址 和 数组地址 | 定义数组类型 | 定义指针数组类型语法 | 直接定义指针数组类型变量语法 )

2023-11-13 09:06:33 浏览数 (1)

一、数组概念

1、数组语法

数组语法 :

代码语言:javascript复制
type arrayName[size];
  • type 是 数组元素类型 ;
  • arrayName 是 数组名称 ;
  • size 是 数组中元素个数 ;

数组示例 : 数组元素类型是 int , 数组名称是 array , 数组元素个数为 5 ;

代码语言:javascript复制
 int array[5];

声明数组时 , 还可以进行初始化操作 ;

代码语言:javascript复制
// 声明一个包含5个整数的数组 , 并进行初始化操作
int array[5] = {1, 2, 3, 4, 5}; 

2、数组首元素地址 和 数组地址

上述数组 int array[5]; 中 :

  • array 是 数组 首元素 的 地址 ;
  • &array 是 整个数组 的地址 ;

数组首元素地址 array , 与 数组地址 &array 是不同的 ,

  • array 1 的 步长是 4 字节 , 也就是 数组元素 的大小 ;
  • &array 1 的 步长是 20 字节 , 也就是 整个数组 的大小 , 数组中有 5 个 int 类型的元素 20 字节 ;

二、定义数组类型


1、定义数组类型语法

定义数组类型语法 :

代码语言:javascript复制
typedef type (arrayType)[size];
  • typedef 是 重命名关键字 , 这里是将数组类型重命名为 arrayType 数组类型名称 ;
  • type 是 数组元素类型 ;
  • arrayType 是 定义的数组类型名称 ;
  • size 是 数组大小 ;

定义数组类型示例 : 下面是定义了 有 5 个 int 类型的数组类型 , 数组类型名称为 int5ArrType ;

代码语言:javascript复制
typedef int int5ArrType[5];  

使用定义的数组类型 , 声明并初始化一个数组变量 :

代码语言:javascript复制
int5ArrType myArray = { 1, 2, 3, 4, 5 };

2、代码示例 - 定义数组类型

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;

#include <stdio.h>  

// 定义数组类型 , 该数组有 5 个 int 类型元素
typedef int int5ArrType[5];

int main() {

    int5ArrType myArray = { 1, 2, 3, 4, 5 };

    // 计算数组元素累加结果
    int sum = 0;

    for (int i = 0; i < 5; i  ) {
        sum  = myArray[i]; // 计算数组元素的和  
    }

    printf("数组元素的和为:%dn", sum);
	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
}

执行结果 :

数组元素的和为:15 请按任意键继续. . .

三、指针数组类型


1、定义指针数组类型语法

定义指针数组类型语法 :

代码语言:javascript复制
typedef type (*pArrayType)[size];
  • typedef 是 重命名关键字 , 这里是将数组类型重命名为 arrayType 数组类型名称 ;
  • type 是 数组元素类型 ;
  • * 表示 该定义的类型是 指针类型 , 该指针指向一个 type[size] 数组类型 的 数组 ;
  • pArrayType 是 定义的指针数组类型名称 ;
  • size 是 数组大小 ;

定义指针数组类型示例 : 下面是定义了 指针数组类型 , 指向 有 5 个 int 类型的数组 , 数组类型名称为 pInt5ArrType;

代码语言:javascript复制
// 定义指针数组类型 , 这是一个指向数组的指针 
// 指向的数组类型是 int[5] 类型
typedef int (*pInt5ArrType)[5];

使用定义的指针数组类型 , 声明并初始化一个指针数组变量 :

代码语言:javascript复制
int5ArrType myArray = { 1, 2, 3, 4, 5 };

// 注意 : 将 数组地址 &myArray 赋值给 指针数组类型
// 不要把 数组首元素地址 myArray 赋值给 该变量 , 否则会出错
pInt5ArrType myP = &myArray;

2、直接定义指针数组类型变量语法

直接定义指针数组类型变量语法 :

代码语言:javascript复制
type (*p)[size];
  • type 是 数组元素类型 ;
  • * 表示 该定义的类型是 指针类型 , 该指针指向一个 type[size] 数组类型 的 数组 ;
  • p 是 定义的指针数组类型变量名称 ;
  • size 是 数组大小 ;

直接定义指针数组类型变量示例 : 下面定义了变量 p , 该变量是一个指针类型的变量 , 指向 int[5] 类型数组的指针 ;

代码语言:javascript复制
    // int(*)[5] 是 指向 int[5] 类型数组的指针 
    // 这里不使用 typedef 定义的 指针数组类型 , 直接定义指针数组类型的变量
    // 该操作等同于 pInt5ArrType myP = &myArray;
    int(*p)[5] = &myArray;

3、代码示例 - 定义指针数组类型

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;

#include <stdio.h>  

// 定义数组类型 , 该数组有 5 个 int 类型元素
typedef int int5ArrType[5];

// 定义指针数组类型 , 这是一个指向数组的指针 
// 指向的数组类型是 int[5] 类型
typedef int (*pInt5ArrType)[5];

int main() {

    int5ArrType myArray = { 1, 2, 3, 4, 5 };

    // 计算数组元素累加结果
    int sum = 0;

    for (int i = 0; i < 5; i  ) {
        sum  = myArray[i]; // 计算数组元素的和  
    }

    printf("数组元素的和为:%dn", sum);


    // 注意 : 将 数组地址 &myArray 赋值给 指针数组类型
    // 不要把 数组首元素地址 myArray 赋值给 该变量 , 否则会出错
    pInt5ArrType myP = &myArray;

    // int(*)[5] 是 指向 int[5] 类型数组的指针 
    // 这里不使用 typedef 定义的 指针数组类型 , 直接定义指针数组类型的变量
    // 该操作等同于 pInt5ArrType myP = &myArray;
    int(*p)[5] = &myArray;
	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
}

执行结果 :

0 人点赞