C 指针代码实例

C 指针基础概念

指针是C语言的核心特性之一,用于存储变量的内存地址。通过指针可以直接操作内存,提高程序的灵活性和效率。

指针声明与初始化:

int num = 10;      // 定义一个整型变量  
int *ptr = #   // 定义指针并初始化为num的地址  

解引用指针:
通过指针修改变量值:

printf("num的值: %d\n", *ptr); // 输出10  
*ptr = 20;                     // 修改num的值为20  


指针与数组

数组名本质是指向数组首元素的指针,可以通过指针遍历数组。

指针遍历数组:

int arr[] = {1, 2, 3, 4, 5};  
int *p = arr;  
for (int i = 0; i < 5; i++) {  
    printf("%d ", *(p + i)); // 等价于arr[i]  
}  

指针与字符串:
字符串通过字符指针操作更高效:

char *str = "Hello";  
while (*str != '\0') {  
    printf("%c", *str);  
    str++;  
}  


指针与函数

指针作为函数参数可实现传址调用,避免数据拷贝。

交换两个变量的值:

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

int x = 5, y = 10;  
swap(&x, &y); // x=10, y=5  

函数返回指针:
需注意返回局部变量的指针是未定义行为:

int* createArray(int size) {  
    int *arr = (int*)malloc(size * sizeof(int));  
    return arr; // 返回动态分配的内存  
}  


多级指针

多级指针用于存储指针的地址,常见于动态二维数组或函数参数传递。

二级指针示例:

int num = 100;  
int *ptr = #  
int **pptr = &ptr;  

printf("num的值: %d\n", **pptr); // 输出100  

动态二维数组:

int **matrix = (int**)malloc(3 * sizeof(int*));  
for (int i = 0; i < 3; i++) {  
    matrix[i] = (int*)malloc(3 * sizeof(int));  
}  


指针与结构体

结构体指针通过->操作符访问成员,避免拷贝开销。

结构体指针示例:

typedef struct {  
    int x;  
    int y;  
} Point;  

Point p1 = {1, 2};  
Point *ptr = &p1;  
printf("坐标: (%d, %d)\n", ptr->x, ptr->y);  

指针作为结构体成员:

typedef struct {  
    char *name;  
    int age;  
} Person;  

Person person;  
person.name = "Alice";  
person.age = 25;  


指针安全与常见错误

指针使用不当会导致程序崩溃或内存泄漏。

空指针解引用:

int *ptr = NULL;  
// *ptr = 10; // 错误:解引用空指针  

内存泄漏:
动态分配的内存需手动释放:

int *arr = (int*)malloc(5 * sizeof(int));  
free(arr); // 必须释放  

野指针:
释放后指针应置空:

free(arr);  
arr = NULL; // 避免野指针  

通过以上示例和说明,可以深入理解C指针的强大功能及其潜在风险。合理使用指针能大幅提升程序性能,但需谨慎避免内存问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值