zoukankan      html  css  js  c++  java
  • C指针学习(C Premier Plus 学习笔记)

    数组和指针:这里 flizny是一个数组。

    flizny == &flizny[0];  //数组名是该数组首元素的地址,两者都是常量,在程序的运行过程中,不会改变。但是,可以把数组名赋值给指针变量然后可以修改指针变量的值

    例: short dates[4];  short *pti;  pti = dates;  //数组名是数组首元素地址,将地址赋值给指针。

      C中,指针加1,指的是增加一个存储单元。对于数组来说,意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址(声明指针时要指向对象类型)。

      

    1 dates + 2 == &dates[2];    //相同的地址
    2 *(dates + 2) == dates[2];    //相同的值
    3 
    4 // ar[n] == *(ar+n)
    5 
    6 *(dates+2);     //dates 第3个元素的值
    7 *dates+2;        //dates第一个元素的值加2
    datas++     //指针递增,指向数组的下一个元素

    函数、数组和指针

      处理数组的函数,该函数返回数组中所以元素之和。

      total = sum(marbles);  //可能的函数调用

    其中,数组名marbles是数组首元素的地址,故这个函数传递的是一个地址,因此,函数原型中的形参是一个指针,int sum(int *ar);    实参是地址,则函数原型中的形参是指针。  形参指针,实参地址(数组名)

    sum从该参数获得了该数组首元素的地址

    注: 因为数组名是该数组首元素的地址,作为实际参数的数组名,要求形式参数是一个与之匹配的指针。

    使用指针形参:

    int sum(int *ar, int n); 

    int sum(int ar[], int n);   // 等价的两种表示方法

      //sum() 函数使用一个指针形参标识数组的开始(也表明了数组中的数据类型),用一个整数形参表面待处理数组的元素个数。

    还有一种方法可以给函数传递信息:传递两个指针,第一个指针指明数组的开始处,第二个指针指明数组的结束处。

      int sump(int *start, int *end);

     两种循环:

    for(i = 0; i < n; i++)

    while (start < end)    //使用两个指针开始和结束循环

    指针表示法和数组表示法:

    ar[i]    和    *(ar+i)    等价。ar[i]中的ar是数组名,*(ar+i)中的ar是指针变量。只有当ar是指针变量时,才可以使用ar++这样的表达式。

    指针递增表达式:

    int data[2] = {100,200};
    int moredata[2] = {300,400};
    int *p1, *p2, *p3;
    p1=p2=data;        //数组名赋值给指针
    p3=moredata;
    
    *p1++ = 100;        //    *p1=200    先使用指针指向位置的值,再递增指针
    *++p2 = 200;        //    *p2=200   先递增指针,再使用指针指向位置上的值
    (*p3)++=300;        //    *p3=301   先使用指针指的值,再将这个值递增

    实参和形参

    实参用于把值从主调函数传递给被调函数。

    被调函数一般不会改变主调函数中的变量,如果要改变,应使用指针作为参数。如果希望把更多的值传回主调函数,必须这么做(用指针)。因为用return语句只能把被调函数中的一个值传回主调函数,要传更多的值,只能使用指针

  • 相关阅读:
    BZOJ3065(替罪羊树套线段树)
    BZOJ3052(树上带修莫队)
    BZOJ1095(动态点分治+堆)
    NOIWC颓废记
    BZOJ2125 最短路
    Simpson积分(BZOJ2178)
    BZOJ4555 [Tjoi2016&Heoi2016]求和
    NTT+多项式求逆+多项式开方(BZOJ3625)
    Miller-Rabin,Pollard-Rho(BZOJ3667)
    单纯形求解线性规划(BZOJ1061)
  • 原文地址:https://www.cnblogs.com/oucxlw/p/9149689.html
Copyright © 2011-2022 走看看