什么是指针?
指针在C语言中相当于内存地址
指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。
指针变量的定义格式
数据类型 * 变量名
使用注意细节
注意:数据类型要跟指向变量的数据类型保持一致;* 表示标记该变量为指针变量
注意:指针变量占用的大小,跟数据类型无关,跟编译器有关;给指针变量赋值的时候,不能把一个数值赋值给指针变量
注意:函数中变量的生命周期跟函数相关,函数结束,变量也会消失,此时在其他函数中,就无法通过指针使用,如果不想函数中的变量被回收,可以在变量前面加static关键字
#include<stdio.h>
int* method();
int main() {
//调用method函数,并使该函数中的变量
int* p = method();
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("%d\n", *p);//不能打印,因为method函数结束后,该函数中的所有变量都会消失
return 0;
}
int* method() {
int a = 10;
return &a;
}
运行结果:
拖延时间
拖延时间
拖延时间
拖延时间
拖延时间
拖延时间
-858993460
解决办法:在变量前加static关键字
int* method();
int main() {
//调用method函数,并使该函数中的变量
int* p = method();
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("拖延时间\n");
printf("%d\n", *p);//不能打印,因为method函数结束后,该函数中的所有变量都会消失
return 0;
}
int* method() {
static int a = 10;
return &a;
}
运行结果:
拖延时间
拖延时间
拖延时间
拖延时间
拖延时间
拖延时间
10
定义指针变量
int a = 10;
int* p1 = &a;
打印内存地址
printf("%p\n", p1);
double b = 10;
double* p2 = &b;
指针的作用
利用*(解引用运算符)可以查询数据,存储数据
查询数据
#include<stdio.h>
int main() {
int a = 10;
//定义一个指针去指向变量a
int* p = &a;
//利用指针去获取变量中的数据
printf("%d\n", *p);
return 0;
}
存储(修改)数据
int main() {
long g = 89L;
// //定义一个指针去指向变量
long* p3 = &g;
// //利用指针去获取变量中的数据
printf("%ld\n", *p3);//89
// //利用指针去修改数据
*p3 = 88L;
// //打印输出
printf("%ld\n", *p3);//88
printf("%ld\n", g);//88
return 0;
}
操作其他函数中的变量
#include<stdio.h>
/*
交换变量中记录的值
定义两个变量,要求交换变量中记录的值
//注意:交换的代码写在一个新的函数swap中
*/
void swap(int num1, int num2) {//仅仅交换的是num1和num2中记录的值
int temp = num1;
num2 = num1;
num2 = temp;
}
int main() {
//定义两个变量;
int a = 10;
int b = 20;
//调用swap函数
printf("调用前:%d %d\n", a, b);//调用前:10 20
swap(a, b);//仅仅把a和b的值传递过去
printf("调用后:%d %d\n", a, b);//调用后:10 20
return 0;
}
//声明函数
void swap(long* num1, long* num2);
int main() {
//定义两个变量;
long a = 89L;
long b = 78L;
//调用swap函数
printf("调用前:%ld %ld\n", a, b);
swap(&a, &b);
printf("调用后:%ld %ld\n", a, b);
return 0;
}
//定义函数,交换的是num1指向的变量和num2指向的变量的值
void swap(long* num1, long* num2) {
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
函数返回多个值
#include<stdio.h>
//定义一个函数,求数组的最大值和最小值,并进行返回
void getMaxAndMin(int arr[], int len, int* max, int* min) {
//求数组的最大值
*max = arr[0];
//求数组的最小值
*min = arr[0];
for (int i = 1; i < len; i++) {
if (arr[i] > *max) {
*max = arr[i];
}
if (arr[i] < *min) {
*min = arr[i];
}
}
}
int main() {
//定义数组
int arr[] = {1,2,3,4,5,6,7,8,9,10 };
int len = sizeof(arr) / sizeof(int);
//调用函数
int max = arr[0];
int min = arr[0];
getMaxAndMin(arr, len, &max, &min);
printf("数组的最大值为:%d\n", max);
printf("数组的最小值为:%d\n", min);
return 0;
}
函数的结果和计算状态分开
//定于一个函数,将两个数相除,获取他们的余数
//返回值:表示计算的状态:0 正常 1 不正常
int getRemainder(int num1, int num2, int* res) {
if (num1 % num2 == 0) {
//停止
return 0;
}
*res = num1 % num2;
return 0;
}
int main() {
//定义两个变量
int a = 90;
int b = 8;
int res;//余数
//调用函数
int flag = getRemainder(a, b, &res);
if (!flag) {
printf("获取两个数的余数为:%d\n", res);//2
}
return 0;
}
66万+

被折叠的 条评论
为什么被折叠?



