主页 > 手机  > 

C语言指针学习笔记

C语言指针学习笔记
1. 指针的定义

指针(Pointer)是存储变量地址的变量。在C语言中,指针是一种非常重要的数据类型,通过指针可以直接访问和操作内存。

2. 指针的声明与初始化 2.1 指针声明

指针变量的声明格式为:数据类型 *指针变量名;

int *ptr; // 声明一个指向int类型的指针 char *cptr; // 声明一个指向char类型的指针 2.2 指针初始化

指针变量初始化时,可以将变量的地址赋值给指针,使用地址运算符&。

int a = 10; int *ptr = &a; // 将变量a的地址赋值给指针ptr 3. 指针的使用 3.1 访问指针所指向的变量

通过解引用运算符*可以访问指针所指向的变量的值。

int a = 10; int *ptr = &a; printf("Value of a: %d\n", *ptr); // 输出a的值 3.2 修改指针所指向的变量

通过指针可以修改指针所指向的变量的值。

int a = 10; int *ptr = &a; *ptr = 20; // 修改a的值为20 printf("Modified value of a: %d\n", a); // 输出修改后的a的值 4. 指针的运算

指针可以进行算术运算,如加减操作,但要注意指针运算的结果依赖于指针指向的数据类型。

int arr[] = {1, 2, 3, 4, 5}; int *ptr = arr; printf("Value at ptr: %d\n", *ptr); // 输出1 ptr++; printf("Value at ptr after increment: %d\n", *ptr); // 输出2 5. 指针数组与数组指针 5.1 指针数组

指针数组是一个数组,其元素是指针。

int a = 1, b = 2, c = 3; int *arr[3] = {&a, &b, &c}; for (int i = 0; i < 3; i++) { printf("Value at arr[%d]: %d\n", i, *arr[i]); } 5.2 数组指针

数组指针是指向数组的指针。

int arr[3] = {1, 2, 3}; int (*ptr)[3] = &arr; for (int i = 0; i < 3; i++) { printf("Value at ptr[%d]: %d\n", i, (*ptr)[i]); } 6. 函数指针

函数指针是指向函数的指针,可以通过函数指针调用函数。

#include <stdio.h> void hello() { printf("Hello, World!\n"); } int main() { void (*func_ptr)() = hello; // 声明并初始化函数指针 func_ptr(); // 通过函数指针调用函数 return 0; } 7. 指针与动态内存分配

在C语言中,可以使用malloc、calloc、realloc和free函数进行动态内存分配和释放。

#include <stdio.h> #include <stdlib.h> int main() { int *ptr = (int*)malloc(sizeof(int) * 5); // 动态分配内存 if (ptr == NULL) { printf("Memory allocation failed\n"); return 1; } for (int i = 0; i < 5; i++) { ptr[i] = i + 1; } for (int i = 0; i < 5; i++) { printf("Value at ptr[%d]: %d\n", i, ptr[i]); } free(ptr); // 释放内存 return 0; } 8. 常见指针错误 8.1 野指针

野指针指向未分配或已释放的内存。

int *ptr; *ptr = 10; // 未初始化指针,可能导致程序崩溃 8.2 空指针解引用

解引用空指针会导致程序崩溃。

int *ptr = NULL; *ptr = 10; // 解引用空指针,可能导致程序崩溃
标签:

C语言指针学习笔记由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C语言指针学习笔记