C++知识总结-薛老师主讲

C语言指针

1. 理解指针变量的定义及引用

指针变量的定义:
指针变量是一种存储内存地址的变量。在C语言中,指针变量通过符号来声明。例如,int ptr;表示ptr是一个指向int类型数据的指针。

指针变量的引用:
使用指针变量时,可以通过运算符来访问指针所指向的内存地址中的数据。例如,ptr = 10;表示将整数10存储在ptr所指向的内存地址中。

示例代码:

#include <stdio.h>

int main() {
    int a = 5;
    int *ptr; // 定义指针变量ptr,指向int类型

    ptr = &a; // 将变量a的地址赋值给指针ptr

    printf("a的值: %d\n", a);
    printf("ptr所指向的值: %d\n", *ptr); // 访问指针ptr所指向的值
    printf("ptr的地址: %p\n", (void *)ptr); // 输出指针ptr的地址
    printf("a的地址: %p\n", (void *)&a); // 输出变量a的地址

    // 修改指针所指向的值
    *ptr = 10;
    printf("修改后a的值: %d\n", a);

    return 0;
}

注释解析:

int a = 5;:定义了一个整型变量a并初始化为5。
int ptr;:定义了一个指向整型的指针变量ptr。
ptr = &a;:将变量a的地址赋值给指针ptr。
printf(“a的值: %d\n”, a);:打印变量a的值。
printf(“ptr所指向的值: %d\n”,
ptr);:通过指针ptr访问并打印其所指向的值。
printf(“ptr的地址: %p\n”, (void )ptr);:打印指针ptr自身的地址。
printf(“a的地址: %p\n”, (void
)&a);:打印变量a的地址。
*ptr = 10;:通过指针ptr修改其所指向的值,即修改了变量a的值。

2. 掌握指向数组的指针变量

指向数组的指针变量:
数组名本身就是一个指向数组首元素的指针。因此,可以定义一个指针变量来指向数组的首元素,从而操作数组。

示例代码:

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 指向数组首元素

    // 使用指针遍历数组
    for (int i = 0; i < 5; i++) {
        printf("arr[%d] = %d\n", i, *(ptr + i)); // 使用指针访问数组元素
    }

    // 修改数组元素
    for (int i = 0; i < 5; i++) {
        *(ptr + i) += 10; // 每个元素加10
    }

    // 再次遍历数组
    printf("修改后的数组:\n");
    for (int i = 0; i < 5; i++) {
        printf("arr[%d] = %d\n", i, arr[i]);
    }

    return 0;
}

注释解析:

int arr[] = {1, 2, 3, 4, 5};:定义了一个整型数组arr并初始化为{1, 2, 3, 4, 5}。
int ptr = arr;:定义一个指向整型的指针变量ptr,并将其初始化为指向数组arr的首元素。
for (int i = 0; i < 5; i++) { printf(“arr[%d] = %d\n”, i,
(ptr + i)); }:使用指针ptr遍历数组并打印每个元素的值。(ptr + i)表示访问指针ptr指向的数组的第i个元素。
for (int i = 0; i < 5; i++) {
(ptr + i) += 10; }:通过指针ptr修改数组的每个元素,使其值增加10。
再次遍历数组并打印修改后的值。

示例二:

#include <stdio.h>

int main() {
    int a = 10;            // 声明一个整型变量a并初始化为10
    int *p;                // 声明一个整型指针变量p

    p = &a;                // 将变量a的地址赋值给指针p

    printf("变量a的值: %d\n", a);        // 输出变量a的值
    printf("变量a的地址: %p\n", (void*)&a); // 输出变量a的地址
    printf("指针p存储的地址: %p\n", (void*)p); // 输出指针p存储的地址
    printf("指针p指向的值: %d\n", *p);    // 输出指针p指向的值,即变量a的值

    // 通过指针修改变量a的值
    *p = 20;
    printf("修改后变量a的值: %d\n", a);  // 输出修改后的变量a的值

    return 0;
}
  1. 指针的基本定义和使用
    在这个例子中,我们定义了一个整型变量a和一个指向整型的指针p。我们将a的地址赋给p,然后通过p来访问a的值。
  2. 指针与数组

指针的指针

#include <stdio.h>

int main() {
    int num = 10;
    int *ptr = # // 指针ptr指向num
    int **pptr = &ptr; // 指针的指针pptr指向ptr

    printf("num的值: %d\n", num);
    printf("ptr的值(即num的地址): %p\n", ptr);
    printf("pptr的值(即ptr的地址): %p\n", pptr);
    printf("pptr指向的指针的值(即num的地址): %p\n", *pptr);
    printf("pptr指向的指针指向的变量的值: %d\n", **pptr);

    return 0;
}