华数云图科创小分队

华数云图科创小分队

目录

.指针的概要

指针

一级指针

二级指针

二、一个生动形象的例子

三、总结

四、顺序表结构体中的应用


 

一.指针的概要

  • 指针

是一种数据类型,它保存着一个变量的内存地址。指针可以通过间接引用操作符 * 来访问所指向的变量。在 C++ 中,指针通常用于动态分配内存、传递参数等场景。

  • 一级指针

是直接指向一个变量的指针。一级指针只包含一个地址值,它通常用于传递参数并允许函数修改那些参数的值。使用一级指针时需要注意,指针变量必须在声明后设置为指向有效的内存位置,否则可能会导致程序崩溃或产生未定义的行为。

以下是一级指针的示例:

int a = 5;
int* p = &a; // 定义一个整型指针变量 p,它指向 a 的地址
*p = 3;      // 通过指针 p 修改 a 的值
  • 二级指针

二级指针是指向指针的指针,也叫做间接指针。二级指针包含两个地址值,它通常用于多级数据结构中,例如图的邻接表实现,以及某些数据结构算法等场景。

以下是二级指针的示例:

int a = 5;
int* p = &a;
int** pp = &p; // 定义一个整型指针的指针变量 pp,它指向 p 的地址
**pp = 3;      // 通过指针 pp 修改 a 的值

需要注意的是,使用二级指针来访问变量时,需要使用两个 * 运算符。这是因为第一个 * 运算符表示取出指针变量中存储的地址,而第二个 * 运算符则对这个地址进行间接引用,获得指向的变量的值。

二、一个生动形象的例子

这是一个 C++ 的程序,其功能为计算某个班级同学的平均分。程序中定义了两个函数 calcAvgclassAvg,以及一个 main 函数。

calcAvg 函数的作用是计算某个学生的平均分,并返回平均分值。该函数接受两个参数,第一个参数 scores 是一个指向整型数组的指针,表示这个学生的五个成绩;第二个参数 size 是一个整数,表示成绩数组的长度(即本例中固定为5)。在函数内部,使用了指针算术运算 *(scores+i) 访问成绩数组中的元素,从而计算出总分,最终返回总分除以科目数得到的平均分。

classAvg 函数的作用是计算整个班级的平均分,并通过指针返回结果。该函数接受四个参数,第一个参数 students 是一个指向字符串数组的指针,表示班级中每个学生的名字;第二个参数 scores 是一个指向整型指针数组的指针,表示班 [好像出错了,请稍后再试。]

// 计算某个学生的平均分
double calcAvg(int* scores, int size) {
double sum = 0;
for (int i = 0; i < size; i++) {
sum += *(scores + i); // 使用指针算术运算访问成绩数组的元素,计算总分
}
return sum / size; // 返回总分除以科目数得到平均分
}

// 计算整个班级的平均分
void classAvg(string* students, int** scores, int size, double* result) {
double sum = 0;
for (int i = 0; i < size; i++) {
sum += calcAvg(*(scores + i), 5); // 调用 calcAvg 函数计算每个学生的平均分,并累加到总分之中
}
*result = sum / size; // 将计算后的平均分通过指针返回
}

int main() {
// 定义学生姓名和成绩数组
string students[] = {"Alice", "Bob", "Cathy", "David", "Eva"};
int scores[][5] = {{98, 87, 93, 89, 91},
{85, 81, 76, 92, 88},
{90, 87, 82, 89, 91},
{83, 79, 77, 86, 80},
{91, 89, 94, 95, 92}};
// 定义一个指针数组,保存每个学生的成绩数组指针
int* ptrScores[] = {scores[0], scores[1], scores[2], scores[3], scores[4]};
double result; // 保存班级平均分的变量
// 调用 classAvg 函数计算班级平均分,并将结果通过指针传递回来
classAvg(students, ptrScores, 5, &result);
cout << "Class average: " << result << endl; // 输出班级平均分
return 0;
}

在上述示例中,

我们定义了一个 calcAvg 函数来计算一个学生的平均分,它接收一个指向整型数组的指针以及数组长度作为参数。

接下来,我们定义了 classAvg 函数来计算班级平均分,并通过指针返回结果。

classAvg 函数中,我们使用了一个二级指针 scores 来存储每个学生的成绩(即一级指针数组),并将其传递给 calcAvg 函数进行计算。最后,我们在 main 函数中调用 classAvg 函数,并通过指针返回结果。

这个例子中的二级指针 scores 通过间接引用可以获得每个学生的成绩,从而计算班级平均分。

三、总结

指针可以通过间接引用操作符 * 来访问所指向的变量。在 C++ 中,指针通常用于动态分配内存、传递参数等场景。

一个生动的例子是,假设我们想要计算班级平均分,我们可以使用二级指针来存储每个学生的成绩,并通过间接引用获得每个学生的成绩,从而计算班级平均分。这个例子中的二级指针通过间接引用可以获得每个学生的成绩,从而计算班级平均分。

四、顺序表结构体中的应用

typedef struct ListNode
{
	int val;
	struct ListNode* next;
}LTNode,*PLTNode;

很多时候我们在数据结构当中看到是这个代码

这样定义的好处是可以简化复杂的类型声明,使得代码更加简洁易懂。在实际应用中,我们可以使用 PLTNode 来表示指向节点的指针,从而方便地进行链表操作。例如:

PLTNode head = NULL; // 链表头结点
head = (PLTNode)malloc(sizeof(LTNode)); // 动态分配内存
head->val = 1; // 节点值为 1
head->next = NULL; // 指向下一个节点的指针为 NULL

PLTNode p = (PLTNode)malloc(sizeof(LTNode));
p->val = 2; // 节点值为 2
p->next = NULL;
head->next = p; // 将新节点插入到链表中

指针在C++中的应用及顺序表结构体中的应用-LMLPHP

 

 

04-19 07:33