C语言指针:从入门到精通

指针的基本概念

指针是C语言中一种特殊的变量,用于存储内存地址。通过指针可以直接访问或操作内存中的数据,提高程序的灵活性和效率。

声明指针
指针的声明需要指定所指向变量的数据类型,语法如下:

int *ptr;    // 指向整型变量的指针  
char *c_ptr; // 指向字符型变量的指针  

指针的初始化与赋值
指针必须指向有效的内存地址后才能使用,否则会导致未定义行为。

int num = 10;  
int *ptr = # // ptr指向num的地址  

指针的操作

取地址与解引用

  • & 运算符用于获取变量的地址。
  • * 运算符用于访问指针所指向的值。
int a = 5;  
int *p = &a;  
printf("%d", *p); // 输出5(解引用)  

指针的算术运算
指针支持加减运算,移动的单位与其指向的数据类型大小相关。

int arr[3] = {1, 2, 3};  
int *p = arr;  
p++; // 指向arr[1]  

指针与数组

数组名本质上是首元素的地址,指针可以用于遍历数组。

int arr[3] = {10, 20, 30};  
int *p = arr;  
for (int i = 0; i < 3; i++) {  
    printf("%d ", *(p + i)); // 输出10 20 30  
}  

指针与函数

指针作为函数参数
通过指针可以实现函数内修改外部变量的值(按引用传递)。

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

函数返回指针
函数可以返回指针,但需确保指向的内存未被释放。

int* getPointer(int *x) {  
    return x;  
}  

动态内存分配

使用 malloccallocreallocfree 动态管理内存。

int *ptr = (int*)malloc(5 * sizeof(int)); // 分配5个整型空间  
if (ptr != NULL) {  
    free(ptr); // 释放内存  
}  

指针的高级用法

指针数组与数组指针

  • 指针数组:存储指针的数组。
  • 数组指针:指向数组的指针。
int *ptr_arr[3]; // 指针数组  
int (*arr_ptr)[3]; // 数组指针  

多级指针
指向指针的指针,用于处理多层间接访问。

int a = 10;  
int *p = &a;  
int **pp = &p; // 二级指针  

注意事项

  • 避免野指针(未初始化的指针)。
  • 防止内存泄漏(动态分配后未释放)。
  • 确保指针类型匹配,避免类型不兼容的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值