c语言--变量指针和指向变量的指针---部分知识点总结

  1. 不能将一个整数直接赋给指针变量作为地址

  2. 改变函数形参的值,不会改变对应实参的值

  3. //正确写法
    int n,*p=NULL;
    p=&n;
    scanf("%d",p);
    printf("%d\n",*p);
  4. “&”:取地址运算 ; “*”:指针运算符,是定义指针变量的说明符

  5. “%le”意思是用科学计数法输出的double数据。 其中%l表示双精度数据double,e表示科学计数法,也就是指数形式。

  6. p=&k就是把k的地址取出来后赋值给p。. int *p=&k;就是定义一个整型指针,并且给它初始化k的地址

  7. *p++;//等价于*p; p++;
  8. int* p1 ; int** p2; int*p3;//都是合法的定义指针变量的语句
    p=NULL;和p=0;或p='O';等价;
  9. 指针变量可以通过求地址运算符(&)来获得地址值,可以通过指针变量获得地址值,还可以通过标准函数获得地址值

  10. 语句p=NULL;执行后,指针p并不是指向地址为0的存储单元,而是具有一个确定的值-"空"

  11. 所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数;

  12. #include <stdio.h>
    main()
    {
        char* p1 =0;
        int* p2=0;
        double* p3 =0;
        printf("%d,%d.,%dIn", sizeof(p1), sizeof(p2), sizeof(p3));//值为4,4,4
    }
    /*sizeof用来获取类型或数据对象的长度,也即是一个这种数据类型的变量在内存中所占字节 数。
    专门用来存放变量地址的变量,称为“指针变量”。所有类型的指针变量都是地址,所占字节数均为4*/
  13. #include <stdio.h>
    main()
    {
        int a = 0.*ptr;
        ptr = &a;
        *ptr = 3;
        a =(*ptr)++;
        printf("%d,%din", a.*ptr);//程序运行后的输出结果是4,4
    }
    /*程序执行过程为:定义整型变量a=0与指针ptr
    ,使指针指向变量a。对指针指向的变量进行赋值=3,将指针所指向变量加1,并赋值给a=4,此时指针依然指向变量a,输出a与指针指向的变量值: 4,4,*/
  14. #include <stdio.h>
    int change(int*data)
    {
        *data = *data % 2;//注意,此处data指向的数值对1求余会改变实参指褚向的值
        return (*data)+ 1;//重新赋给data指向的变量,然后将ta加a指向的变量值与1的和返回
    }
    main()
    {
        int data = 12;
        change(&data);  //程序第一次调用change()函数,传入实参data的地址,将data   的值修改为0 (12%2=0),此时输出data的值是0
        printf("%d," , data);
        data = change(&data);//再次调用tange()传入data的地址,将data的值修改为0     (0%2=0),然后将返回值1重新赋给主函数变量data,所以此时输出data的值是1,
        printf("%d," , data);
    }//程序运行后的输出结果是  0,1

  15. void fun (char *p2, char *p1)
    { 
        while ((*p2=*p1)!= '\0')
               { 
                   p1++; 
                   p2++;
               }
    }
    //函数的功能是 接收两个字符指针p2、p1,while循环每次将p1指向的字符赋给p2指向的字符,然后判断p2指向的字符是否是空字符'\0',若不是,p1和2顺序后移一位,直到p1和p2指向空字符,
    所以fun()函数的功能是将p1指向的字符串赋值到p2指向的内存空间中
  16. 当指针指向某个变量时,才能向其中写入数据;

  17. 指针除了指向变量外,还可以赋值为NULL,表示未指向的任何地址,此时不能写入数据,另外指针必须有基类型,只能指向基类型相同的变量

  18. 指针只能与一个整数进行运算,即移动指针,两个指针不能运算

  19. p1 =p2 =(int *)calloc(5,sizeof(int));
    //程序定义整型指针变量p1,p2,调用calloc函数分配5个整型长度的内存空间赋给p1,p2,所以p1,p2指向的是同一段内存的首地址
  20. 若定义void*p;,则p可以保存任何内存地址;

  21. void*为无类型指针,使用时,可以强制转换为任意的指针类型,

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_61156831

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值