指针基础知识

news2024/11/22 16:38:11

指针的概念:一个变量的地址称为该变量的指针。如果有一个变量专门用来放其他变量的地址(指针),这个变量被称为“指针变量”。

指针就是内存地址,指针变量就是存储地址的变量

代码示例:

#include <stdio.h>

int main()
{
	int a = 5;
	int *p;
	p = &a;

	printf("变量a的值是:%d, 变量a的地址是:%p\n",a,&a);

	printf("变量p的值是:%p, 变量p的地址是:%p\n",p,&p);

	printf("变量p指向a的值是:%d, 变量p所占空间大小是:%d个字节\n",*p,sizeof(p));

	return 0;
} 

注意:

指针无论指向什么类型的数据类型,所占的空间大小都是8字节

例题1:交换两个数x,y的值。

#include <stdio.h>

void swap(int *a,int *b)
{
	int t;
	t = *a;
	*a = *b;
	*b = t;
	printf("*a=%d *b=%d\n",*a,*b);
}
int main()
{
	int x = 5,y = 10;
	printf("x=%d y=%d\n",x,y);
	swap(&x,&y);
	printf("x=%d y=%d\n",x,y);
	return 0;
} 

注释:以指针作形参,实参传递给形参的就是地址值,可以让形参指针影响实参。指针变量更多应用于函数形参,因为c语言是传值调用的,如果函数形参是指针类型的,函数调用时,函数实参就会是变量的地址,所以指针形参就可以指向主调函数中的变量,再利用间接运算符间接操作主函数中的变量。

指针变量的定义

定义指针变量的语法格式:

基类型 *变量名;

获取变量地址的语法格式:

&变量名;

指向void的指针,简称void指针。void*被称为万能指针

void指针指向一块内存,却没有告诉程序该用何种方式来解释这块内存。因此,不能用这种类型的指针直接获取所指内存的内容,必须先转成合适的具体类型的指针才行。

若想声明一个可以接收任何类型指针参数的函数,可以将所需的参数设定为void*指针。

比如标准函数memset(),它被声明再头文件string.h中,其原型如下:

int a[10];
memset(a,0,10*sizeof(int));

空指针常量是一个值为0的整数常量表达式,在头文件stdlib.h以及其他头文件中,宏NULL被定义为空指针常量。在定义指针变量时,指针变量的值可以初始化为NULL,例如:
int *ptr =NULL;
空指针是其值为NULL的指针,所以ptr是空指针空指针不指向任何空间,所以不能用间接运算符(*)取值。

定义变量时未初始化的指针,或指向的目标已销毁了的指针称为悬浮指针野指针。在指针变量使用过程中应该避免使用悬浮指针。误用野指针,会导致程序奔溃。

指针的运算

1、与整数进行加减运算(+、-、++、--)

指针与整数进行相加、相减运算,实际上是将指针进行上移、下移操作

2、同类指针相减运算(-)

同类指针进行相减运算,其结果是两个指针的地址之差除以指针类型所占字节数

3、同类指针关系运算(==、!=、<、>、<=、>=)

注意:指针定义时最好初始化;同类指针没有相加运算;对两个毫无关联的指针比较大小是没有意义的。

指针与一维数组:假设指针变量p指向了数组arr,若想引起一维数组中的元素,可以通过下列两种方式:p[下标] 或 *(p+下标)(p在首个数组单元时才能使用这种方法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于element-ui封装可配置表单组件

“vue”: “^2.7.13” “element-ui”: “^2.15.7” 代码地址 【说明】 该组件时使用vue3&#xff08;vue2.7&#xff09;语法封装&#xff0c;使用时可用vue2语法使用也可以使用vue3语法使用 一、vue2语法使用案例 基础用法 <template><div class"form-demo…

Kubernetes平台部署Grafana Loki Promtail系统

部署结构图&#xff1a; Loki 是主服务&#xff0c;负责存储日志和处理查询promtail 是代理&#xff0c;负责收集日志并将其发送给 lokiGrafana 用于 UI 展示 只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储&#xff0c;就可以在Grafana UI界面通过添加Lok…

网络工程师回顾学习(第二部分)

第六章&#xff1a;网络互连与互联网 需要掌握&#xff1a; &#xff08;1&#xff09;网络互连设备 &#xff08;2&#xff09;网络互连的基本原理和关键技术 &#xff08;扩展&#xff1a;TCP/IP协议簇&#xff09; &#xff08;3&#xff09;Internet协议及其提供的网络…

【python海洋专题四十】海洋指数画法--单色填充图

【python海洋专题四十】海洋指数画法–单色填充图 【python海洋专题四十】海洋指数画法–单色填充图 数据:AMO_index 图像展示: 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【p…

详细记一下jvm调优整过程

cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流量进来&#xff0c;而且活动结束后cpu占用率就下降了&#xff0c;如果是这种情况其实可以不用太关心&#xff0c;因为请求越多&#xff0c;需要处理的线程数越多&#xff0c;这…

解密Elasticsearch:深入探究这款搜索和分析引擎

•开篇 最近使用Elasticsearch实现画像系统&#xff0c;实现的dmp的数据中台能力。同时调研了竞品的架构选型。以及重温了redis原理等。特此做一次es的总结和回顾。网上没看到有人用Elasticsearch来完成画像的。我来做第一次尝试。 背景说完&#xff0c;我们先思考一件事&…

分布式数据库·Hive和MySQL的安装与配置

一、版本要求&#xff1a;Hadoop:hadoop-2.10.1、MySQL&#xff1a;mysql-8.0.35、 HIVE&#xff1a;apache-hive-3.1.2、MySQL驱动&#xff1a;mysql-connector-java-5.1.49 安装包网盘链接&#xff1a;阿里云盘分享 安装位置 Hive:master、MySQL:slave1 二、卸载已安装的…

智能柜+MRO:制造业中的自动售货机

每当谈及企业数字化转型&#xff0c;多数人想到的是人工智能、大数据等高端技术的应用&#xff0c;或是原有业务流程和运营方式的数字化与自动化&#xff0c;实现大幅降本增效等。然而&#xff0c;对于急需在数字时代找到生存之道的企业来说&#xff0c;数字化转型的要求远不止…

如何通过CRM系统进行销售机会管理?

销售机会管理是在销售过程中对潜在客户的精细化管理&#xff0c;销售机会管理的本质是公司用于管理销售机会通用的工具和方法。对于希望建立长期客户关系的现代销售团队来说&#xff0c;CRM客户管理系统是必不可少的工具。那企业如何通过CRM系统进行销售机会管理&#xff1f; …

抖音AAN服务商有几家?

大家都知道抖音服务商多如牛毛&#xff0c;有本地生活服务商&#xff0c;MCN机构服务商&#xff0c;企业认证服务商&#xff0c;ISV服务商等等。但是aan服务商就屈指可数。 aan技术服务商 从关系层面讲&#xff0c;aan服务商的关系友好到啥程度呢&#xff0c;就好比微信指定了…

强强联合!Flat Ads出席云栖大会,加入阿里云“橙”云出海服务联盟

10月31日&#xff0c;一年一度的科技盛会云栖大会在杭州云栖小镇正式开幕。本届云栖大会以“计算&#xff0c;为了无法计算的价值”为主题&#xff0c;除两场重磅主论坛外&#xff0c;还邀请1000多位行业实干家&#xff0c;带来500余场主题分享与互动&#xff0c;通过演讲、研讨…

分享:轰动全球的12大创意二维码营销案例!

今天我们要分享是12个非常有影响力、引起全球轰动的、很成功的创意二维码营销案例。在日常工作中二维码被我们用来存储和分享信息&#xff0c;与此同时&#xff0c;二维码也正在各大展览活动中、电影大片里、全球体育赛事相关活动中、时尚T台上…大展风采&#xff0c;它们帮助品…

Linux内核分析(九)--CPU上下文

目录 一、引言 二、CPU上下文 ------>2.1、CPU上下文切换 三、线程上下文切换 ------>3.1、协程 四、中断上下文切换 ------>4.1、vmstat ------>4.2、pidstat ------>4.3、sysbench 一、引言 Linux是一个多任务的操作系统,可以支持远大于CPU数量的…

数据结构与算法—插入排序选择排序

目录 一、排序的概念 二、插入排序 1、直接插入排序 直接插入排序的特性总结&#xff1a; 2、希尔排序 希尔排序的特性总结&#xff1a; 三、选择排序 1、直接选择排序 时间复杂度 2、堆排序—排升序(建大堆) 向下调整函数 堆排序函数 四、交换排序 1、冒泡排…

vue+css动画 实现文字的上下轮播切换

突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…

window11安装nvm

链接 默认已经安装了node 没有安装的请看链接 github下载最新nvm https://github.com/coreybutler/nvm-windows/releases 找到github下面的 解压之后 安装exe文件 路径自己选择 配置路径和下载源 找到nvm安装路径 -> 找到 settings.txt 文件 -> 配置下载源 node_m…

CSS 下拉菜单、提示工具、图片廊、计数器

一、CSS 下拉菜单&#xff1a; CSS下拉菜单用于创建一个鼠标移动上去后显示下拉菜单的效果。示例&#xff1a; <style> .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f9f…

下拉列表框Spinner

在XML文件中的创建 <Spinnerandroid:id"id/spinner"android:layout_width"wrap_content"android:layout_height"wrap_content"/> 在Java文件中的设置 //获取Spinner对象 Spinner spinnerfindViewById(R.id.spinner); //创建数组…

MoveFunsDAO 星航计划|从Move入门Web3与深入实践「公益课堂」

Move 语言作为最安全的编程语言之一&#xff0c;在资产的安全性和保护方面有着显著优势&#xff0c;被寄予引领 Web3 世界的全新叙事的厚望。 随着 Sui 在今年五月主网上线&#xff0c;它为 Move 生态带来一股新的浪潮。上线以来&#xff0c;Sui 公链的开发活跃度持续数月位居…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发005:守护进程与进程监控

文章目录 1 守护进程1.1 进程组和会话1.2 会话的相关概念1.3 守护进程的概念1.4 守护线程的特点1.5 守护进程创建的基本步骤1.6 本项目守护进程的实现 2 进程监控2.1 进程监控的实现 1 守护进程 1.1 进程组和会话 进程除了有进程的PID之外还有一个进程组&#xff0c;进程组是…