C/C++教程

【C语言】基本指针类型及其常见错误

本文主要是介绍【C语言】基本指针类型及其常见错误,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、基本类型指针及其常见错误

可能导致内存泄露,或野指针

错误一:
#include <stdio.h>

int main(vodi)
{
    int * p;
    int i = 5;
    
    *p = i;    //error,无语法错误,*p指的是本程序以外的地址单元,本程序无权更改
    printf("%d\n",*p);
    
    return 0;
}
错误二:
#include <stdio.h>

int main(void)
{
    int i = 5;
    int * p;
    int * q;
    
    p = &i;
    *q = p;  // error,有语法错误,p是指针,*p是int型变量,二者类型不同
    printf("%d\n",*q);
    
    return 0;
}
错误三:
#include <stdio.h>

int main(void)
{
    int i = 5;
    int * p;
    int * q;
    
    p = &i;
    // *q = p; //error 语法编译会出错,p存放i的地址,*p指普通变量,二者不同
    // *q = *p; // error 语法无错
    printf("%d\n",*q);
    
    return 0;
}
错误四:
#include <stdio.h>

int main(void)
{
    int i = 5;
    int * p;
    int * q;
    
    p = &i;
    // *q = p; //error 语法编译会出错,p存放i的地址,*p指普通变量,二者不同
    // *q = *p; // error 语法无错
    p = q; // q是垃圾值,q赋给p,p也变为垃圾值
    printf("%d\n",*q);
    				/* q的空间是属于本程序的,所以本程序可以读写q的内容,
    				   但是如果q内部是垃圾值,则本程序不能读写*q的内容
    				   因为此时*q所代表的内存单元的控制权限并没有分配给本程序
    				   所有本程序运行到13行时,就会立即出错
    				*/
    
    return 0;
}
二、星号的三种含义
  1. 乘法

  2. 定义指针变量

  3. 指针运算符

    放在定义好的指针变量的前面,*p表示以p的内容为指针的变量

三、通过指针为什么可以是被调函数修改主调函数
#include <stdio.h>
int f(int i,int j)
{
    return 100;
    return 88; //88无法返回
}

int main(void)
{
    int a = 3,b = 5;
    
    a = f(a,b);
    b = f(a,b); //调用2次才可以修改b的值
}
#include <stido.h>
void g(int *p,int *q)
{
    *p = 1;
    *q = 2;
}

int main(void)
{
    int a = 3,b = 5;
    g(&a,&b);
    print("%d %d\n",a,b);
    
    return 0;
}
四、如何通过被调函数修改主调函数普通变量的值
  1. 实参必须为改普通变量的地址
  2. 形参必须为指针变量
  3. 在被调函数中通过( *形参名 = ...)的方式可以修改主调函数相关变量的值
这篇关于【C语言】基本指针类型及其常见错误的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!