C语言指针求问
本帖最后由 mxwawaawxm 于 2020-2-13 19:28 编辑源代码如下
定义了一个字符串数组string
再定义二级指针str_point指向字符串数组string
指针偏移str_point++;
遍历第2个字符串的每个字符,isdigit(**str_point)判断字符是否数字字符。如果不是数字字符,跳出循环
我在遍历前,打印了第2个字符串printf("%s\n", *str_point);
能全部显示"678g90"
在遍历后,再以同样的代码打印printf("%s\n", *str_point);
只能打印后半段g90
str_point二级指针,我只移动了一次,为什么会出现这种情况{:301_979:}
中间遍历,偏移的是(*str_point)++
#include <stdio.h>
#include <ctype.h>
int main(int argc, const char *argv[])
{
char *string[] = {"12345", "678g90"};
char **str_point = string;
str_point++;
printf("%s\n", *str_point);
while (**str_point!='\0') {
printf("%c\n", **str_point);
if (!isdigit(**str_point)) {
break;
}
(*str_point)++;
}
printf("*str_point = %s\n", *str_point);
return 0;
} 这不是正常吗,17行你都把地址移到g了,你再打印就是从g开始,while(12行)之前定义一个临时变量保存*str_point,while里的变量改成临时变量即可 本帖最后由 我的爱是你 于 2020-2-5 22:26 编辑
int main(int argc, const char* argv[])
{
const char* string[] = { "12345", "678g90" };
const char** str_point = string;
str_point++;
int i = 0;
printf("%s\n", *str_point);
while (**str_point != '\0')
{
printf("%c\n", **str_point);
if (!isdigit(**str_point))
{
break;
}
(*str_point)++;
i++;
}
*str_point = (*str_point) -i;
printf("*str_point = %s\n", *str_point);
return 0;
}
或者直接定一个i也行,指针右移多少次就左移回来多少次。
说实话我并不知道你的if有啥用,如果要把g踢出来或去除。这个判断还有点用。 同来学习 你的遍历跳出条件就是遇到非数字跳出,所以此时指针在g90位置上,这时打印指针值当然就是g90了,跟踪调试一下就清楚 我的爱是你 发表于 2020-2-5 22:23
int main(int argc, const char* argv[])
{
const char* string[] = { "12345", "67 ...
输出正常,没得问题啊,因为你的指针加加了,肯定只有g90。,深夜回复,没毛病小熊弟 举个简单的例子:
char * str= "abcde";
str+1:代表字符b的地址;
char ** strs = {"123", "456"};
strs代表:&strs
*strs代表的是:123中1的地址,以%s输出就是123
**strs代表的是strs的值了。
你可以吧二级字符指针看成一个二维数组要容易理解一些
bp946 发表于 2020-2-5 22:14
这不是正常吗,17行你都把地址移到g了,你再打印就是从g开始,while(12行)之前定义一个临时变量保存*str_po ...
我是想不明白
str_point是二级指针
我17行的代码 (*str_point)++;
自增的不是 (*str_point),这也会对str_point起作用吗{:301_979:}
菜鸟弄不明白 photor 发表于 2020-2-5 22:44
你的遍历跳出条件就是遇到非数字跳出,所以此时指针在g90位置上,这时打印指针值当然就是g90了,跟踪调试一 ...
用Visual Studio调试吗
电脑比较差,用着Notepad++
页:
[1]
2