这是剑指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);