const char* occurs(const char* s1, const char* st){
if(length(st)>length(s1)){
return 0;
}
int diff=length(s1)-length(st);
int i=0, j=0, k=0;
for(;i<=diff;i++){
j=i;
while(s1[j]==st[k] && st[k]!='\0'){
k++;
j++;
}
if(st[k]=='\0') return &s1[i];
}
return 0;
}
该函数返回另一个字符串中第一次出现的字符串。在我的主要功能,我这样称呼它:使用指针作为数组,返回引用
const char* occ = occurs(argv[1], argv[2]);
std::cout << &occ << " - " << occ << std::endl;
什么让我困惑的是:是OCC指针,我不应该写的变量是(OCC)和提领它的价值得到地址(* OCC)? 为什么它看起来像一个正常的变量(获取地址与& occ和值occ)? 如果我把它看作一个数组,C++是否会改变一个指针?如果我通过将s1和st作为指针来解决问题,而不使用数组语义,那么对于内存来说它会是一样的吗?
输出运算符'<<'为'const char *'特殊重载以打印c样式字符串。 – user0042
一次又一次地调用'length'不是一个好主意。更好的使用'str :: string' –
我看,不知道'''。另外,我知道这不是一个好主意,它只是一个练习来理解更好的指针/数组(因此不使用'str :: string'),并且我不打扰在不同变量中保存长度,哈哈。 – Dodicin