admin 管理员组文章数量: 887021
2023年12月24日发(作者:arraylist怎么扩容)
信息与智能
DOI: 10.16661/.1672-3791.2204-5042-7013 2023 NO.8
SCIENCE & TECHNOLOGY INFORMATION科技资讯C语言指针变量研究 史宇轩 1 徐洪丽 2* 丁颐宁 3 (1.山东理工大学计算机科学与技术学院 山东淄博 255000; 2.山东农业大学 信息科学与技术学院 山东泰安 271018; 3.山东科技大学 测绘科学与空间信息学院 山东青岛 266590)摘要: 指针在C语言程序设计中占有重要地位,指针变量的灵活性是C语言的主要特色之一。指针变量能够方便表示各种复合数据类型,可以使用数组和字符串,同时也可以处理内存地址。文章首先论述了指针和地址的关系,以及指针的定义;其次,根据指针的实质化繁为简,总结了3种不同的指针赋值方式;再次,给出了常用的指针运算和注意事项;最后,辅助以举例和练习。指针变量的灵活性也带给程序一定的危险性,因此能否正确理解和使用指针是是否掌握C语言的一个标志。关键词: 地址和指针 指针变量 指针变量赋值 指针变量运算中图分类号: TP312.1文献标识码: A 文章编号: 1672-3791(2023)08-0001-04Research of Pointer Variables in C LanguageSHI Yuxuan1 XU Hongli2* DING Yining3( of Computer Science and Technology, Shangdong University of Technology, Zibo, Shandong Province,
255000 China; of Information Science and Engineering, Shandong Agricultural University, Taian,
Shandong Province, 271018 China; 3. College of Geodesy and Geomatics, Shandong University of
Science and Technology, Qingdao, Shandong Province, 266590 China)Abstract: The pointer occupies an important position in programming in C language, and the flexibility of pointer
variables is one of the main features of C language. Pointer variables can easily represent a variety of composite data
types, can use arrays and strings, and can also handle memory addresses. This article firstly discusses the relation be‐tween pointers and addresses and the definition of the pointer, then simplifies the complex according to the essence
of pointer and summarizes three different pointer assignment methods, gives commonly used pointer operations and
matters needing attention again, and finally gives auxiliary examples and exercises. The flexibility of pointer variables
also brings some risks to the program, so whether you can understand and use pointers correctly is a sign of mastery
of C Words: Address and pointer; Pointer variable; Pointer variable assignment; Pointer variable operation指针变量在C语言程序设计中占有重要地位,已知在程序中定义了一个变量,在对该程序进行编译时,基金项目: 泰安市科技局(项目编号:2019GX022)。作者简介: 史宇轩(2002—),男,本科在读,研究方向为机器学习、智能算法及应用。丁颐宁(2003—),女,本科在读,研究方向为遥感智能算法及应用。通信作者: 徐洪丽(1976—),女,博士,副教授,研究方向为机器学习、大数据、混沌非线性系统等,E-mail:*****************.cn。科技资讯SCIENCE & TECHNOLOGY INFORMATION1Copyright©博看网. All Rights Reserved.
NO.8 2023
SCIENCE & TECHNOLOGY INFORMATION首先要借助编译程序将其转换成目标代码,也就是*.可标识的内存区域中。编译系统会根据程序中定义的变量类型,为该变量分配内存单元,该内存单元也就是该变量的地址,其内容为该变量的内容 [1]。因此,程序员可通过程序所定义的对象的名称来访问对象。假定程序员能够知道某程序对象在内存中的存储位置,即
信息与智能念,必须通过地址才能找到存储变量值的存储单元,即称为“指针”。因此,一个变量的地址称为该变量的“指针”。图1为按变量地址存取变量的方式称为“直接访问”方式。int i=3,j=6,k; k=i+j; cout< 信息与智能 2023 NO.8 SCIENCE & TECHNOLOGY INFORMATION科技资讯图2 按指针变量的方式称为“间接访问”方式数组指针可以理解为“数组的指针”,即是指向数据的指针,它的长度由数组本身决定。即首先这个变量是一个指针,该指针存放的是地址,类似于int a[5][6]数组中的a、a+1、a+2等,是指向行的地址,并没有精确到具体的列值。指针数组:指针数组是“指针的数组”,是数组,该数组元素为指针类型。指针变量的定义中需要说明以下内容:(1)用“*”定义该变量为指针变量;(2)指针变量名;(3)说明该变量的名称,及其间接指向数据的类型。指针变量在使用前必须先初试化,初试化之前不会自动分配内存空间。P1=arr; /*把数组arr的首地址赋给指针变量p*/P1=&arr[0]; /* 把arr[0]元素的地址赋给指针变量p1。即p1指向数组arr的第0号元素。*/因此指针变量的赋值有以下3种基本形式:Int a=1,*p; P=&a; // a为普通变量Int a[10],*p;P=a ;//为数组,程序1为示例P2=p1;// p1已经按照上述两种方式赋值注意:“*”出现在不同的位置有不同的意义。出现在类型声明中,它是类型说明符,除此之外,出现在表达式中,它是运算说明符,是指针取内容运算符* [3],表示该指针变量间接所指的内容。2.2 指针运算常用的指针运算有“*”间接访问内存,单目运算符。++/--自增或自减运算符,单目运算符[4]。另外,还用常用的关系运算符有>、<、>=、<=,!=。基础必备知识如下。*++p相当于*(++p)或者a[++i],先对p做加运算,再做*运算。*p++相当于*(p++)或a[i++],先对p进行取内容“*”运算,在使向下移动一位。(*p)++先取*p的值,再将数值自加。++(*p)先将*p2 指针变量的赋值和指针运算2.1 指针变量的赋值如图3所示,根据指针变量的定义和含义,指针变量的内容应该是编译后有具体位置的地址。关于地址,语言中,普通变量有地址,数组的名字代表数组的首地址,即 nt arr[10];则a与第一个元素的地址&arr[0]的值是一样。可以通过printf(”%d%d",arr,&arr[0])测试,即:int arr[10]; /*定义包含10个整型数据的数组*/int *p1; /*定义p1为指向整型变量的指针*/图3 指针变量赋值科技资讯SCIENCE & TECHNOLOGY INFORMATION3Copyright©博看网. All Rights Reserved. NO.8 2023 SCIENCE & TECHNOLOGY INFORMATION 信息与智能图4 指针变量应用举例值自加,再取*的值。因此:P+i和a+i都表示a[i]的地址,即它们都指向数组中第i号元素,即指向a[i];*(P+i)和*(a+i)都表示P+i和a+i所指向对象的内容即a[i]。指向数组元素的指针,即允许指针变量带下标,如p[i]与*(p+i)等价。假如p=a+5,则p[2]就相当于*(p+2),即p[7],p[-3]就相当于*(p-3),即p[2]。等价关系p+i---a+i即从当前p指向地址往后移i个元素的地址。p=a;*(p+5)---*(a+5)---a[5]---p[5]这几种方式是a[5]的不同表示方法。注意:*和&、++、--都是一元运算,它们的优先级比所有的算术运算符都高。*其结合性为自右至左。 *p++等价于*(p++)。两指针变量之间的运算:指针变量不指向同一数组,它们之间的运算没有意义,即仅仅当两指针变量指向同一数组时,运算才有意义。一般情况下,两个指针变量表示同一个数组中的元素,它们可以进行关系运算,运算结果表示它们所指数组元素的地址之间的关系。例如:“p1=p2”表示p1和p2指向同一数组元素;“p1>p2”表示p1处于高地址位置;“p1 ng memory management with C‐Sim: A C‐based visual tool[J].Computer Applications in Engi‐neering Education,2019(5):1217-1235.[6]岳珊.C语言程序设计过程中指针概念的理解及使用[J].信息与电脑(理论版),2020,32(15):111-113.3 举例和练习指针变量应用案例如图4所示。例题:输入两个整数,采用指针方式从小到大排序。# include
版权声明:本文标题:211226056_C语言指针变量研究 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1703376595h448677.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论