1.1 指针的使用
这一章的内容与指针详解的内容有重复,系统了解指针去看:
(2条消息) c指针详细笔记_zlshhdgrbk的博客-CSDN博客
1.1.1 指针的使用
——指针使用场景一: 交换两个变量的值:
int main() {
int a = 5;
int b = 6;
return 0;
}
void swap(int *pa, int *pb) {
int t = *pa;
*pa = *pb;
*pb = t;
}
此时传进去的参数是需要保存且带回结果的变量
——指针应用场景二:minmax函数:
void minmax(int a[], int len, int *min, int *max);
int main() {
int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,22,55,};
int min, max;
minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
printf("min = %d,max = %d\n", min, max);
return 0;
}
void minmax(int a[], int len, int *min, int *max) {
int i;
*min = *max = a[0];
for( i = 1; i < len; i ++ ) {
if ( a[i] < *min ) {
*min = a[i];
}
if ( a[i] > *max ) {
*max = a[i];
}
}
这种情况函数的返回值不只一个
——指针应用场景三:状态通过return返回(也就是运算有可能出错),结果通过指针返回
int divide(int a, int b, int *result) {
int ret = 1;
if ( b == 0 ) {
ret = 0;
} else {
*result = a/b;
}
return ret;
}
——指针常见的错误:
只定义了指针变量,还没有指向任何变量就开始使用指针,如直接赋值*p=12,这样程序容易崩溃
1.2 指针运算
1.2.1 指针运算
- 指针可以+-,可以比大小,不能×,因为没有意义
- 不管指针指向的是什么类型,指针的大小都不变,都占4个字节
- void* 是不知道指针会指向什么类型,具体指向什么不清楚,往往用在底层程序
1.2.2 动态内存分配
C99可以用变量定义数组的大小,在这之前用动态内存的方法
动态内存分配函数:void* malloc (size_t size); 使用前要加头文件#include <stdlib.h>
a = (int*)malloc(number*sizeof(int)); //里面的参数要的是具体字节数
注意malloc返回的结果是void*,所以要做一步类型转换(int*)
之后a就能当作数组来用
注意这块空间a用完后需要手动释放 函数为free(a);
如果申请失败了会返回一个0,或者是NULL