当前位置: 首页 > news >正文

C语言基础之指针1

什么是指针?

指针在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;//定义一个指针去指向变量aint* 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);//88return 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 20swap(a, b);//仅仅把a和b的值传递过去printf("调用后:%d %d\n", a, b);//调用后:10 20return 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;
}

方便操作数组和函数

http://www.dtcms.com/a/428641.html

相关文章:

  • 深圳好的网站建设公安徽网站开发哪家好
  • 昆明公司网站建设做资料分享网站
  • Product Hunt 9月热门 AI 应用解读
  • 电子商务平台网站源码万能视频下载神器
  • 广东的一起做网站免费建设一个可以访问的网站
  • 西安房产网站建设兰州建设网站的公司
  • 网站的总体架构aspnet校友录网站开发
  • 网站建设价格标签房地产开发公司账务处理流程
  • Linux下静默安装Oracle11.2.0.4
  • 网站初期如何推广的邢台手机网站建设公司
  • 巩义做网站xd seo柯桥建设局网站首页
  • GraphRAG概述
  • Matlab通过GUI实现点云的随机一致性(RANSAC)配准
  • 东莞市做网站的公司上海外贸公司名录
  • 临海建设银行网站陕西公司网站建设
  • SpringCloud 与 SpringBoot 的区别:从 “单兵作战” 到 “军团协同”
  • 织梦网站打开慢wordpress mp4播放器
  • 高端家具东莞网站建设技术支持wordpress 代码转义
  • C4D储卡器顶部金属卡槽建模实战教程|附完整视频讲解
  • 2021年上半年网络工程师上午真题
  • 个人怎么见个网站两学一做专题网站
  • 宁波哪里做网站的把自己做的网站发布
  • 福州网站优化公司二手交易网站开发技术路线
  • 济南富新网站建设哪个网站上可以做代打
  • 做网站要用什么计算机语言室内设计应届生简历
  • 淘宝拍立淘接口深度开发:从图像预处理到商品匹配的全链路技术实现
  • 交易网站开发文档最好的wordpress主题
  • 怎么使用wordpress做网站wordpress 比分插件
  • 网站设计公司南京网站灰色代码
  • dumpe2fs 和 tune2fs以及 debugfs调试ext4文件系统