这是剑指offer表示数值的字符串

class Solution {
public:
    bool isNumeric(char* string)
    {
        if(string == NULL)
            return false;
        if(*string == '+' || *string == '-')
            string++;
        if(*string == '\0')
            return false;
        ScanDigit(&string);
        bool num = true;
        if(*string != '\0'){
            if(*string == '.'){
                string++;
                ScanDigit(&string);
                if(*string == 'e' || *string == 'E'){
                    num = Isexponential(&string);
                }
            }
            else if(*string == 'e' || *string == 'E')
                num = Isexponential(&string);
            else
                num = false;
        }
        return num && (*string == '\0');
    }
    void ScanDigit(char **string){
        while(**string >= '0' && **string <= '9' && **string != '\0')
            (*string)++;
    }
    bool Isexponential(char **string){
        if(**string != 'e' && **string != 'E')
            return false;
        (*string)++;
        if(**string == '+' || **string == '-')
            (*string)++;
        if(**string == '\0')
            return false;
        ScanDigit(string);
        return (true && (**string == '\0'));
    }
};

为什么后面那两个函数要用指针的指针?而不是指针就行了?

如果只传一个*,函数结束后,string的指针的值并不会发生变化,依旧是传进去之前那个值。因为传*,相当于copy一个值给他,而并不会改变原来的值,只有传给他地址,才能真正改变原来的值。这个和平时用的int、float的引用是一样的。

引用的写法:

1.int a = 5;

   int &b = a;

   改变b,a也会改变

   如果你直接int b = a,改变b不会改变a

   int &b = a是b也指向a的位置,int b = a,b要单独开个空间,所以b变化不会影响a,相当于copy给b

   深copy就是int b = a,因为两个开辟了两个空间,浅拷贝就是int &b = a,因为两个共享一个空间

   这里的函数如果写成*,就相当于把string这个指针的值copy给函数,也就是深拷贝

2.int c = 5;

   void find_depth(int &depth){};

 find_depth(c);