指针的使用
指针
变量为了表示数据而生,那么指针就是为了传递数据而生。
指针可以理解为他就是一个变量,不过这个变量存放的是别的变量的地址
#include <stdio.h>
int main(){
int val = 10;
int *p;
p = &val;
printf("p = %d, *p = %d",p, *p);
}
指针的使用场景
智能音箱:音频处理
char pcm_data_char;
char pcm_data_array[4096]
void pcmSpeex(char *data){
//do something
}
pcmSpeex(&pcm_data_char);
pcmSpeex(pcm_data_array);
通过函数交换两个值时,用变量传递与指针传递
这个例子中我们发现,执行swap函数,打印出来a,b两个值还是原来的10和5
void swap(int a , int b){
int tmp = a;
a = b;
b = tmp;
}
void main(){
int a = 10, b = 5;
swap(a,b);
printf("a = %d, b = %d \n", a, b ); //a = 10, b = 5
}
如果我们使用指针来交换这两个值,则这两个值就可以被交换。不过与之前不同的是,在swap函数的形参上我们需要传入的是指针,而在swap函数的实参上我们需要传入我们要交换的两个变量的地址。具体原理是我们实参传递过去的是地址,所以我们直接是操作地址来交换值。但是如果普通的形参,程序做的只是形参上的交换,而不是实参上的交换。
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(){
int a = 10, b = 5;
printf("a = %d, b = %d \n", &a, &b); //a = 6618640, b = 6618636
swap(&a, &b);
printf("a = %d, b = %d \n", &a, &b);//a = 6618640, b = 6618636 地址没变
printf("a = %d, b = %d \n", a, b); //a = 5, b = 10 值交换了
}
假设你有一个或两三个保险柜,那么你可以将这几个保险柜的钥匙都放在身上.如果你有几百个保险柜,你还愿意都将钥匙放在身上吗?所以我们可以单纯只知道第一把钥匙所处的位置,后面的钥匙按照第一把钥匙放的位置按顺序排放,那么之后的钥匙我们可以轻而易举的找出。
void open(int *key, int num){
printf("data = %d \n", key[num]);
}
int main(){
int key[100] = {0, 1,2,3,4,5,6,7,8};
open(key ,5);
}