C语言快速复习/知识点概括(八)指针

目录

C语言快速复习/知识点概括(八)指针

1. 指针的定义和声明

2. 指针的初始化

3. 指针的解引用

4. 空指针和野指针

5. 动态内存分配与释放

6. 数组和指针的关系

7. 指针与函数

8. 多级指针

9. 字符串和指针

10. 指针的运算


1. 指针的定义和声明

   - 指针是一个变量,用于存储内存地址。

   - 声明指针时需要指定指针的数据类型,例如 `int* ptr;` 声明了一个指向 `int` 类型数据的指针。

   int* ptr; // 声明一个指向 int 类型数据的指针
   float* fptr; // 声明一个指向 float 类型数据的指针
   char* cptr; // 声明一个指向 char 类型数据的指针
2. 指针的初始化

   - 可以使用取址运算符 `&` 将指针初始化为变量的地址,例如:`int num = 10; int* ptr = #` 这样指针 `ptr` 就指向了变量 `num` 的地址。

   int num = 10;
   int* ptr = # // 将指针初始化为 num 的地址

   float pi = 3.14;
   float* fptr = π

   char letter = 'A';
   char* cptr = &letter;
3. 指针的解引用

   - 使用 `*` 运算符可以访问指针指向的值,例如:`printf("%d", *ptr);` 输出指针 `ptr` 所指向的 `int` 类型变量的值。

   int num = 10;
   int* ptr = #
   printf("%d", *ptr); // 输出 num 的值

   float pi = 3.14;
   float* fptr = π
   printf("%f", *fptr); // 输出 pi 的值

   char letter = 'A';
   char* cptr = &letter;
   printf("%c", *cptr); // 输出 letter 的值
4. 空指针和野指针

   - 空指针表示指针不指向任何有效的内存地址,可以用 `NULL` 来表示,例如:`int* ptr = NULL;`。

   - 野指针表示指针指向未知或已释放的内存地址,使用野指针可能导致程序错误。

   int* ptr = NULL; // 声明一个空指针

   int* wildPtr; // 未初始化的指针,可能成为野指针
   *wildPtr = 5; // 野指针赋值,可能导致错误
5. 动态内存分配与释放

   - 使用 `malloc()` 函数可以动态地分配内存空间,返回一个指向新分配内存的指针,例如:`int* ptr = (int*)malloc(sizeof(int));`。

   - 使用 `free()` 函数可以释放动态分配的内存,例如:`free(ptr);`。

   int* ptr = (int*)malloc(sizeof(int)); // 分配一个 int 类型大小的内存空间
   *ptr = 10; // 对分配的内存进行写入操作
   free(ptr); // 释放动态分配的内存空间
6. 数组和指针的关系

   - 数组名本身就是一个指向数组首元素的指针,例如:`int nums[5] = {1, 2, 3, 4, 5}; int* ptr = nums;`。

   - 使用指针可以对数组进行遍历、访问和操作。

   int nums[3] = {1, 2, 3};
   int* ptr = nums;

   printf("%d", *ptr); // 输出第一个元素 1

   ptr++; // 将指针移动到下一个元素
   printf("%d", *ptr); // 输出第二个元素 2

   ptr += 2; // 将指针向后移动两个单位
   printf("%d", *ptr); // 输出第三个元素 3
7. 指针与函数

   - 可以将指针作为参数传递给函数,用于在函数内部修改实参的值。

   - 可以通过函数返回指针来返回动态分配的内存空间。

   void changeValue(int* ptr) {
       *ptr = 20; // 在函数内部修改指针所指向变量的值
   }

   int num = 10;
   changeValue(&num);
   printf("%d", num); // 输出修改后的值 20
8. 多级指针

   - 多级指针是指指向指针的指针,可以用于处理二维数组、链表等数据结构。

   int num = 10;
   int* ptr1 = #
   int** ptr2 = &ptr1;

   printf("%d", **ptr2); // 输出 num 的值
9. 字符串和指针

   - 字符串实际上是以 null 结尾的字符数组,可以使用指针来访问和操作字符串。

   char str[] = "Hello";
   char* ptr = str;

   while (*ptr != '\0') {
       printf("%c", *ptr); // 逐个输出字符
       ptr++; // 指针移动到下一个字符
   }
10. 指针的运算

    - 指针可以进行加法和减法运算,用于在内存中移动指针的位置。

    - 指针相减可以计算两个指针之间的距离(以元素为单位)。

    int nums[3] = {1, 2, 3};
    int* ptr = nums;

    printf("%d", *ptr); // 输出第一个元素 1

    ptr++; // 将指针移动到下一个元素
    printf("%d", *ptr); // 输出第二个元素 2

    ptr += 2; // 将指针向后移动两个单位
    printf("%d", *ptr); // 输出第三个元素 3

    int diff = ptr - nums; // 计算两个指针之间的距离
    printf("%d", diff); // 输出 2(以元素为单位)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值