7n25gSnP 发表于 2026-3-22 17:13:43

C语言指针完全指南 - 新手也能看懂的指针教程

【C语言入门】指针完全指南 - 看完这篇再也不怕指针

什么是指针?
指针就是一个变量,它存储的是另一个变量的内存地址。

基本语法:
int a = 42;       // 普通变量,存储值42
int *p = &a;      // 指针变量,存储a的地址

两个关键运算符:
& 取地址符 - 获取变量的内存地址
* 解引用符 - 获取地址上存储的值

示例一:指针基础用法

#include <stdio.h>

int main() {
    int a = 10;
    int *p = &a;

    printf("a的值: %d\n", a);      // 输出: 10
    printf("a的地址: %p\n", &a);   // 输出: 0x7ffd...
    printf("p的值: %p\n", p);      // 输出: 和&a一样
    printf("*p的值: %d\n", *p);      // 输出: 10

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

    return 0;
}

示例二:指针与数组

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int *p = arr;// 数组名就是首元素地址

    for (int i = 0; i < 5; i++) {
      printf("arr[%d] = %d\n", i, *(p + i));
    }

    return 0;
}

示例三:用指针交换两个数

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5, y = 10;
    printf("交换前: x=%d, y=%d\n", x, y);

    swap(&x, &y);

    printf("交换后: x=%d, y=%d\n", x, y);
    return 0;
}

示例四:动态内存分配

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n = 5;
    int *arr = (int *)malloc(n * sizeof(int));

    if (arr == NULL) {
      printf("内存分配失败!\n");
      return 1;
    }

    for (int i = 0; i < n; i++) {
      arr = (i + 1) * 10;
      printf("arr[%d] = %d\n", i, arr);
    }

    free(arr);// 一定要释放内存!
    return 0;
}

新手常犯的错误:

错误1:未初始化的指针
int *p;    // 危险!p指向随机地址
*p = 10;   // 可能导致程序崩溃

正确做法:
int *p = NULL;// 先置空
p = &a;         // 再赋值

错误2:野指针
int *p = (int *)malloc(sizeof(int));
free(p);
*p = 10;// 错误!p指向的内存已释放

错误3:内存泄漏
int *p = (int *)malloc(sizeof(int));
// 忘记free(p),内存永远不会释放

指针速查表:
int *p;          // 指向int的指针
int **pp;      // 指向指针的指针
int arr;      // arr本质上是指向首元素的指针
void (*func)(int); // 指向函数的指针

练习题:写一个函数,用指针找出数组中的最大值。

void find_max(int *arr, int size, int *max) {
    *max = arr;
    for (int i = 1; i < size; i++) {
      if (arr > *max)
            *max = arr;
    }
}

搞懂指针,C语言就算入门了!有问题欢迎回帖讨论!
页: [1]
查看完整版本: C语言指针完全指南 - 新手也能看懂的指针教程