C语言指针数据类型与运算总结

需积分: 7 0 下载量 55 浏览量 更新于2024-08-24 收藏 7.98MB PPT 举报
"有关指针的数据类型和指针运算的小结-c 程序设计第三版谭浩强 高清" 在C语言中,指针是编程中的一个重要概念,它能够存储内存地址,使得我们可以直接操作内存。在《C程序设计第三版》中,谭浩强教授对指针的数据类型和指针运算进行了详细总结。以下是关于指针的一些关键知识点: 1. **指针数据类型**: - `int i;` 定义了一个整型变量i,它存储整数值。 - `int *p;` 定义了一个指针变量p,它存储一个整型数据的内存地址,p称为整型指针。 - `int a[n];` 定义了一个包含n个整数的数组a。 - `int (*p)[n];` 定义了一个指针数组p,它包含n个可以指向整型数组的指针元素。 - `int (*p)[n];` 或 `int *p[n];` 这两种写法都是表示p是一个指针,它指向一个包含n个整数的一维数组。 - `int f();` 定义了一个返回整型值的函数f。 - `int (*p)();` 定义了一个函数指针p,它指向的函数返回一个整型值。 - `int **p;` 定义了二级指针p,它指向一个指向整型数据的指针变量。 2. **指针运算**: - 指针的赋值:将一个变量的地址赋值给指针,例如 `p = &i;` 将变量i的地址赋给指针p。 - 指针的解引用:通过`*`运算符获取指针所指向的变量的值,例如 `int value = *p;` 从p指向的地址获取整型值并存储在value中。 - 指针的算术运算:指针可以进行加减运算,例如 `p++;` 使指针p移动到下一个内存位置。需要注意的是,这种运算通常只适用于同一数组或结构体类型的连续内存区域。 - 通过指针访问数组元素:如 `p = a;` 可以将数组首元素的地址赋给指针,然后可以通过 `*(p + i)` 访问数组的第i个元素。 3. **指针与函数**: - 函数参数可以是指针,这样函数可以修改实参的值,因为传递的是地址而非复制值。 - 函数返回值也可以是指针,允许函数返回一个对象的地址,例如动态分配的内存。 4. **指针和数组的关系**: - 在C语言中,数组名实际上是一个指向数组首元素的指针,例如 `int *arr_ptr = a;` 是合法的,其中arr_ptr指向数组a的第一个元素。 5. **内存管理**: - 使用`malloc()`和`calloc()`动态分配内存,返回指向分配内存的指针。 - 使用`free()`释放由`malloc()`分配的内存,防止内存泄漏。 在实际编程中,理解并熟练运用这些指针相关的概念和操作对于编写高效、灵活的C程序至关重要。同时,不同的C编译器可能对某些特性有不同的支持,因此在编写代码时需要了解所使用的编译器的特性。