C语言指针运用探讨
摘 要:
摘 要:C语言是我们常用的一种计算机编程工具,在计算机的各个领域都得到广泛的引用。C语言的指针是C语言编程技术中的核心,也是C语言中最具特色的部分。运用指针可以灵活的解决很多程序编辑问题,是很多其他高级程序编辑语言不能代替的。
关键词:
关键词:C语言 指针 计算机编程
1 C语言指针的基本内涵
在C语言中存在一种指针变量,这种变量与普通的变量一样在定义了之后都会在计算机中占据一定的位置,其中储存这一定的数据,只是这里面储存的数据是一个地址。这个地址指示了另一个数据的位置。通常来说,对于指针变量的定义:指针类型数据的数据类型是关键字,指针变量中存放的数据是另一个数据的储存地址,指针变量的性质就是它储存的位置中的数据的性质。
2 C语言指针在应用过程中的优势分析
C语言指针是C语言中的重要组成部分,在C语言的使用过程中如果能够熟悉的使用C语言指针,能够帮我们解决很多实际中的难题,可以使很多复杂的问题变得简单。用指向性的单变量指针变量作为一个函数的参数,能够得到多个变化后的值。通常在运用函数调用都是有且只有一个函数值会被得到,而在应用了指针函数之后,通过一个变量就能得到很多变化之后的值。在指向性数组之中是有指针函数的话能够短时间内得到很多的结果,对于数组的处理效率会得到很大的提升,所以说在熟练的掌握了数组之后可以用数组来处理数组能够极为有效的提高对数组的处理效率。指向性的字符串在应用了指针变量之后能够减少数据储存的空间,指针变量本身就可以储存数据的位置,所以在使用了指针变量之后字符串的存储空间能够得到很大的提升,从而提高程序工作的效率。指向结构体变量的指针作为函数的参数的时候能够在很大程度上节省时间和存储所占的空间,从而提高程序的执行效率。指向量FILE类型的结构体中应用指示变量能够很快的找到与之相关的文件,从而更快的实现对文件的访问。
3 C语言指针运用中的问题
C语言指针在与C语言中的数组、函数以及运算符号结合之后,通常在说明的时候会具有很高的复杂行,使得人们对于指针的含义理解起来十分的困难,下面是对人们在使用C语言指针是所犯的错误。
3.1 悬游指针
悬游指针是一种使用的未进行出事话的指针p,这个指针并不是说没有值,只是它的指示不确定的,同时,因为它的值不确定的原因,这个指针的指向也是不确定的,这中不确定性就有可能会破坏整个系统的正常工作,是一种很危险的指针类型,在使用过程中这种指针很有可能会对程序造成不可挽回的灾难性后果。
int a [5 ] , i ,* p;
fo r( i= 0; i < 5; i+ + ) scanf( "% d", p+ + ) ;
应在fo r语句前加上语句"p= a; ",使p初始化[3 ] 。
3.2 指针指示类型错误
main( ) { static int a [3] [4 ]= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int* p; for ( p=a; p < a+ 12; p+ + ) printf ( "% d",* p) ; }
在这个程序当中将p=a【0】错用为了p=a,虽然在程序当中a和a【0】的值是相同的,但是a【0】是一级int型指针,a是二级的,二者的指针类型不同,指示的对象也不行同,所以说这个程序之中p只能接受a【0】不能接受a。
3.3 指针偏移
main( ) {char * p, s [80]; p= s;
do {g ets( s) ;
w hi le(* p) print f ( "% x h",* p+ + ) ;
}w hi le( strcmp( s, "end") ; }
在上面的这个程序中,当指针初始化p=s进入循环之后p会进行自加,这可能会使得p的指针转移到字符的其他位置中去,甚至可能会使p转到字符串的另一变量或者程序代码之中。这种情况是非常危险的,对于整个程序的运行来说都是可能会造成不可挽回的后果。
3.4 * 和[ ]在定义时只是说明作用, 不是运算符
&、* 、[ ]是C语言中的三种运算符号,他们的含义分别是地址运算符、指针运算符跟下标运算符。人们对于这三个运算符所代表的意义是很明确的,并没有什么错误的理解。但是在实际的应用中,很多人却将他们看作是运算符号。&、* 、[ ]这三个运算符在运算的过程中只是起到说明的作用,并不能看做是运算符。
3.5 用整数值对指针进行赋值
在C语言之中,指针的值就是他所指向的地址,准确的说指针的数值在程序的运算过程过程中就是一个整数数值,,但是却不能够直接讲一个整数的数值赋予给指针。因为指针的整数数值是有方向性的,但是在程序语言中的整数数值却是没有方向的。将这个没有方向的整数数值赋予到指针的时候,指针就真的只是一个整数数值而不能指向一个地址。
int num;
int* pt;
num = 192635;
p= num;
最后一个语句的目的是使指针指向地址192635( 十进制), 编译时系统会提示这个语句有错误。
3.6 指针之间值的相互赋予
# inc lude / a lloc. h0
m a in( )
{ int* m, * n;
m = ( int* ) m allo c( sizeof( int) ) ;
n= ( int* ) m a llo c( sizeof( int) );
* m = 78;
* n= 82;
m = n;
printf( d% d, % dd,
* m, * n); } [ 7]
在C语言之中,指针的值是可以相互赋予的,比如说在这个程序之中“m=n”就是讲n的指向赋予给了m中去,但是原来已经赋予给m的内存空间却没有被释放出去,使得这个内存空间成为了无效的内存空间,但是在实际的程序运行中又需要对m进行反复的应用,这也就使得内存空间变得十分的紧张。所以我们在进行指针之间值的赋予是通常会将被赋予的指针的内存空间进行释放,将其中的内存空间赋予给一个无用的指针,然后再将有用的值赋予到该指针中去。使程序在反复运行时不会存在内存不足的情况。指针之间的赋值不当会造成内存紧张,严重的时候甚至会造成死机现象。
3.7 指针赋值只能存在于相同类型之间
C语言中的指针具有不同的类型,而在进行指针之间的赋值的时候,只能在相同类型的指针进行赋值。如果两个指针的类型不相符合的话是不能够进行赋值的。如果一个指针被赋予了其他类型指针的数据,将会在程序的运行中造成错误。可能会造成程序的运行错误甚至于使得程序崩溃。
4 结语
C语言中的指针使得C语言的应用变得十分灵活,使得许多问题的解决变得方便了很多。虽然说指针的应用使得对问题的解决变得灵活简单,但是许多C语言的初学者因为对指针的定义理解的不够透彻,在使用指针的过程中会犯很多错误,影响程序的正常运行。
参考文献:
[1]张威虎.C语言指针运用探讨[J].延安大学学报:自然科学版,2000(3):25-27.
[2]史娟.C语言指针教学中的常见问题及教法探析[J].电脑知识与技术,2012(17):4168-4169,4172.
[3]任磊.C语言指针的运用及常见错误分析[J].商丘师范学院学报,2008(12):91-93.
本文编号:14557
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/14557.html