************

简析C语言指针中的几个常见错误及纠正方法

导读:个整数按大小顺序输出。  swap(p1,p2)  int*p1,*p2;  {int*p; *p=*p1; *p1=*p2; *p2=*p;  }  main()  {  int a,b;  int *pointer1,*pointer2;  scanf(“%d,%d”,&a,&b);  pointer=&a;pointer2=&b;  if(a  printf(0%d,%d0,a,b);  }  这里swap函数的功能是实现指针p1,p2所指单元内容互换,其中以*
摘要:C语言中指针是它的精髓部分,也是它的重要特色。正确灵活地运用指针可以有效地表示复杂的数据结构;能够方便地使用字符串;能动态分配内存;能直接处理内存地址;有效而方便地使用数组等。掌握指针的应用,可以使程序简洁、紧凑、高效。每个学习和使用C语C语言指针中的几个常见错误及纠正方法相关范文由写论文的好帮手http://www.wowa.cn提供,转载请保留****.言的人,都应当深入地学习和掌握指针。
  关键词:C语言;指针;数组
  C语言指针的应用非常灵活,使用它也存在者危险。对熟练的人来说,正确的使用它可编写出颇具特色且质量优秀的程序,实现用其它高级语言难以实现的功能。但如果使用不当,很容易出错。有些隐藏较深的错误很难发现和排除,因此在学习C语言时,理解和使用指针非常重要。以下通过几个实例,说明指针编程时的几个常见错误和改正办法。
  一、 使用未初始化的指针
  C语言中指针是用于存放变量地址的。指针变量是C语言中的一个特殊类型的变量。指针变量定义后应确定其指向。在没有确定指针的具体指向前,指针变量的内容是随机的地址,盲目地引用将十分危险。
  例如:下列程序用于将键入的两个整数按大小顺序输出。
  swap(p1,p2)
  int*p1,*p2;
  {int*p; *p=*p1; *p1=*p2; *p2=*p;
  }
  main()
  {
  int a,b;
  int *pointer1,*pointer2;
  scanf(“%d,%d”,&a,&b);
  pointer=&a;pointer2=&b;
  if(a
  printf(0%d,%d0,a,b);
  }
  这里swap函数的功能是实现指针p1,p2所指单元内容互换,其中以*p为中间变量,这就犯了未定向就使用的错误,根据C编译系统的规则,当swap函数发生调用时,系统仅给指针p分配一个内存单元。而这一内存里存放的地址未定。它可能是操作系统或其它用户区的某一内存地址,当运转程序时,很可能使不属于本程序的某个内存内容被修改,从而造成整个系统的崩溃。对swap函数可修改为如下形式:
  swap(p1,p2)
  int*p1,*p2;
  {intp; p=*p1; *p1=*p2; *p=p; }
  二、指针变量所指向的变量类型与其定义的类型不符
  定义指针变量的一般格式为:
  类型说明符 *指针变量名;
  其中类型说明符规定的是指针变量所指向的变量的类型。C语言规定一个指针变量只能指向同一类型的变量。例如:
  main()
  {
  float x;
  int *p;
  p=&x;
  }
  x与*p数据类型不符。因x的类型是单精度实型的,而指针p是指向整型变量的指针,应将语句改为: float *p;
  又如:
  main()
  {
  int *p;
  p=malloc(sizeof(mt));
  }
  malloc()函数的功能是分配内存存储空间,并返回一个指向分配空间起始单元的指针。一般系统中,此指针为char型或void型,因此与指针变量p类型不符。应对malloc函数做强制转换,改为: p=(int)malloc(sizecf(int));
  三、指针的错误赋值
  指针变量的值是某个数据对象的地址,只允许取正的整数值,而千万不能将它与整数类型变量混淆。指针赋值时在赋值号右边的应是变量地址,且是所指变量地址。
  例如:
  main() {
  int i=5;
  int *p;
  p=i; }
  语句p=i中的赋值是错误的,应改为:
  p=&i;
  又如:
  main() {
  int max();
  int *pointer();
  pointer=max(); }
  语句的含义是将int型函数值赋给了指针变量,是错误的写法,应直接写函数名就行了,即:p=max;
  四、结束语
  指针是C语言中极重要的概念,是其特征功能之一,也是C语言程序设计的难点。本文只对一部分常见理由给出正确使用指针的策略。
上一篇论文:试议英美文学作品中模糊语言的特色与翻译 下一篇论文:试论交互式图形编程语言Processing应用
相关论文
业务范围
免费本科范文
免费硕士范文
免费职称范文
论文****
职称论文****表