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

您所在的位置:网站首页 调试器报告了一个错误 C语言指针中的几个常见错误及纠正方法

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

2024-06-28 16:30| 来源: 网络整理| 查看: 265

摘要:C语言中指针是它的精髓部分,也是它的重要特色。正确灵活地运用指针可以有效地表示复杂的数据结构;能够方便地使用字符串;能动态分配内存;能直接处理内存地址;有效而方便地使用数组等。掌握指针的应用,可以使程序简洁、紧凑、高效。每个学习和使用C语言的人,都应当深入地学习和掌握指针。    关键词: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语言程序设计的难点。本文只对一部分常见问题给出正确使用指针的方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3