C语言指针

C语言指针,第1张

指针定义
#include
#include

int main()
{

//指针变量实现间接访问,为了配合函数调用
     int i=10,j;


    int* p; //指针定义:存放变量地址

    p=&i;//取i的地址,也叫引用i,整形指针存放整形指针地址,无法取其他类型

    printf("*p=%d",*p);//将i地址存放的内容打印出来  10
    
    
    
    



    return 0;
}

指针做形参
#include
#include




void change(int* i) //接收i的指针
{
    *i=5; //取i的地址的内容,赋值5
}

void pointer_trans()
{
    int i=10;
    printf("before change i=%d\n",i);
    change(&i);//传入i的地址,也就是指针
    printf("before change i=%d\n",i);
}

int main()
{


    pointer_trans();








    return 0;
}

指针偏移
#include
#include

#define N 5

void print(int *p)
{

    for(int i=0; i<N; i++)
    {
        printf("%3d",*(p+i)); //  1 2 3 4 5
    }
}

void  pointer_move()
{
    //指针偏移,每次偏移 按类型不同,偏移不同 sizeof(a) 个大小
    int a[N]= {1,2,3,4,5};//数组本身是一个指针变量,可以当指针传入
    int *p;
    p=a;

    for(int i=0; i<N; i++)
    {
        printf("%3d",*(p+i)); //  1 2 3 4 5

    }
    printf("\n");
    print(a);

}

int main()
{


    pointer_move();






    return 0;
}

一道练习题
#include
#include

#define N 5



void pointer_self_add()
{
    int a[3]={2,7,8};

    int *p;
    int j;
    p=a;
    j=*p++; //先j=*p j=a[0], p++后 *p=7
    printf("a[0]=%d,j=%d,*p=%d\n",a[0],j,*p);//2,2,7

    j=p[0]++; //先j=p[0]=7 因为p[0] 为p指向的第一个元素,前面p++故p指向数组中元素7
              //p[0]的元素值为7 ,7++变为8,故p[0]=*p=8,由于p[0]的值被修改故,a[1]的值被修改a[1]变为8

     printf("a[1]=%d,j=%d,*p=%d\n",a[1],j,*p);//8 7 8

}
int main()
{

   pointer_self_add();







    return 0;
}

野指针


#include 
#include 
#include 







void use_malloc()
{
    int len;
    char *p;
    scanf("%d",&len);
    p=(char*)malloc(len);//申请空间
    strcpy(p,"hello");
    puts(p);
    free(p);


}


void  wild_pointer()
{
    int *p1,*p2,*p3;

    p1=(int*)malloc(4);
    *p1=1;

    p2=(int*)malloc(4);
    *p2=2;

    free(p1); //野指针free了一个指针,但是这个指针没有赋值NULL,即野指针
    p3=(int*)malloc(4);//p3继承p1空间

    *p3=3;
    printf("*p3=%d\n",*p3);//3

    *p1=100; //由于p1还指向那块空间,所以p1可以更改

    printf("p3=%d\n",*p3);//100



}

int main()
{

    wild_pointer();









    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存