• c语言指针浅理解


    指针指向一个地址用*作为解引用运算符进行解引用

    声明可以是

    int *pi;

    char *pc;

    float * pf, *pg;

    1 int nurse = 22;
    2 int * ptr;
    3 ptr = &nurse;  //指针是指向地址,指向nurse的指针
    4 val = *ptr; //解引用,把nurse地址处的值赋给val

    指针输出有专门的%p  输出为十六进制,虽然%x也是十六进制,但两者是不同的,指针输出用%p

    指针的值是它指向对象的地址,指针加一,指针的值递增它所指向类型的大小

    例如 int * p;

    p指向一个地址,以%p的方式输出是一个十六进制的值,再以同样方式输出p+1,结果比p的结果大4

    因为int类型占四个字节,p+1是将p地址加一个int类型大小

    函数中使用指针

    如果要用函数计算数组中所有值的和可能用

    total = sum(marbles);

    则函数中的形参类型应该是指针,因为实参marbles是数组首元素的地址,指针也是取地址;

     1 int sum(int * ar, int n)
     2 {
     3 
     4     int total = 0;
     5     for(int i = 0;i < n; i++)//n是指数组元素个数
     6   {
     7       total += ar[i]; //ar[i]和*(ar+i)等价
     8   }  
     9 
    10 return total;
    11 }

     数组中指针求差

       两个指针之差的差值是两个元素的距离,差值单位和数组类型的单位相同;

    例如

     1 # include<stdio.h>
     2 int main(void)
     3 {
     4 
     5  int ar[5] = {1,5,8,7,6};
     6  int *p1,*p2;
     7  p1 = ar;//指向ar数组首元素地址
     8  p2 = &ar[4];
     9  printf("%p,%p,%d
    ",p1,p2,p2-p1);
    10 
    11  return 0;
    12 }

    结果

    差的结果为4,意思是两个指针指向的元素差4个int类型,不是四个字节

     因为指针使得数据容易被修改,为了安全在数据前加const

    多个函数处理一个数据在不需要修改数据的函数形参加const

  • 相关阅读:
    Leetcode 第135场周赛解题报告
    程序员如何当好面试者
    程序员如何当好面试官
    Leetcode 第133场周赛解题报告
    如何高效工作——团队篇
    程序员如何高效工作——个人软件篇
    程序员如何高效工作——个人硬件篇
    HTTP协议:从原理到流程|乐字节
    Tomcat详解|乐字节
    说说Java Web中的Web应用程序|乐字节
  • 原文地址:https://www.cnblogs.com/9527s/p/10280071.html
Copyright © 2020-2023  润新知