《C和指针》6.12章节遇到的关于指针的问题
该章节针对针对指针举了一个例子:在一个数据结构体里找某个字符是否存在。
下面是我按例程写的:
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int find_str(char **, char);
int find_str_1(char **, char);
int main()
{
char *strings[] = {
"there is a dog.",
"no,that's a cat.",
NULL
};
int ret;
ret = find_str(strings, 'm'); //改变了strings
//ret = find_str_1(strings, 'm'); //不改变strings
printf("%d\n", ret);
return 0;
}
int find_str(char **strings, char value)
{
while (*strings != NULL) {
while (**strings != '\0') { //断点1
if (*(*strings)++ == value) {
return TRUE;
}
}
strings++; //在未执行这一句指针自增运算的时候(比如在检测"there is a dog."是否包含目标字符的过程中),断点1处的strings值是一直不变的。也就是说:这句指针自增导致了传入的strings参数被改变?那为什么find_str_1()里面的那句指针自增未改变传入的参数?
}
return FALSE;
}
int find_str_1(char **strings, char value)
{
char *line;
while ((line = *strings) != NULL) {
while(*line != '\0'){
if (*line++ == value) {
return TRUE;
}
}
strings++;
}
return FALSE;
}
让我很搞不懂的是:
find_str()改变了传入的参数,而find_str_1(并没有改变传入的参数。
并且我GDB调试find_str()的过程中,设置了断点1,在检测"there is a dog."这个字符串中是否包含目标字符'm'的过程中,strings值(是一个地址)是一直不变的。那在find_str()里,哪一句导致了传入的指针strings被修改?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将 find_str() 里的
if (*(*strings)++ == value)
展开成两段,如下这里只有两处会修改变量值
你可以这样理解第二处的修改
而 strings[i] 是一个字符串指针,因此每执行一次将导致该字符串指针往后移,
直到找到目标字符,或字符串结尾。
举一反三,计算下面代码运行完之后,各个变量的值
答案是只有 strings 的第一个元素被改了,原来是 s0,变成 s0 + 1。
应该是if那里的自增