从main开始看 定义一个名为name和name1的数组,里面放着的是china和chinese,没问题
下一行是一个实现连接的函数,看着也没问题,但理论上你想name你只给他分配一个china的空间,只有那么大,后面连的是chinese给它放哪儿了?连好了也是占有的不合法的不是可以使用空间,写的时候要注意
跳至char** strnlen ( char* a , char* s )这个函数,a指向name,s,指向name 返回一个指向指针的指针
char** d = &a;这个指针d是指向指针a的,也就相当于a 改变了d也改变了(这里为什么我就不说了哈)
while( a != 0)这一句,a里面放的是地址,你看你的下面的s带了*号,不多解释
{
a++;这一句,++和是同一级别的,规则是从右至左看,所以这句话也就是*(a++)a先后自增,然后对a取值一下,你觉的最后的取值有意义吗?
}
while( *s != 0 )//我的s所指的字符不是结束符(对的)
{
*a = *s;那我就把s所指的字符赋值给a所指的空间(对的)
*a++;a指向下一个地址(同上面第一个while里的*a++不多解释)
*s++;s指向下一个地址(同上面第一个while里的*a++不多解释)
printf("%c",*a);输出所指向的字符???你的a已经在上两行++了你输出的是a还没有进行赋值的空间的值
}
return d;d你指向了a,上面说了,a一变,d也就变了,你的d就是最后a指向的空间
这个是我改以后的代码
void strnlen ( char* a , char* s )
{
char* d = a;//d指向a所指向的也就是d指向name就行,a变了,d不变,才能找到一个字符串的首地址呀
while( *a != 0)
{
a++;
}
while( *s != 0 )
{
*a = *s;
a++;
s++;
}
*a='\0';//一定要记得这个,一个字符串要有终束符
printf("%s",d);
}
int main(int argc, char argv[])
{
char name[] = "china";
char name1[] = "chinese";
strnlen(name,name1);
return 0;
}
可以看出对指针有一定的概念,但对指针具体指的是什么还不太清楚,可以先弄懂指针指向的是什么,然后多做题巩固下,有些没说太清,自己可以摸索下