gpt4 book ai didi

c - 马尔可夫链。实现添加方法

转载 作者:行者123 更新时间:2023-11-30 15:07:20 24 4
gpt4 key购买 nike

我对实现中的下一个语句有点困惑:

void add(char *prefix[NPREF], char *suffix) {
State *sp;

sp = lookup(prefix, 1);
//addsuffix(sp, suffix);

printf("size of prefix %d",&prefix);
printf("size of prefix %s", prefix + 1);
printf("size of prefix %d \n", &prefix+1);
for (int i = 0; i < NPREF; i++)
printf("%s \n" , prefix[i]);


printf("memmove \n");

memmove(prefix, prefix + 1, (NPREF - 1) * sizeof(prefix[0]));
prefix[NPREF - 1] = suffix;

for (int i = 0; i < NPREF; i++)
printf("%s \n", prefix[i]);

}

mmemove(前缀, 前缀 + 1, (NPREF - 1) * sizeof(前缀[0]));

所以prefix是一个char类型的指针。在这个术语中,前缀 + 1 是指向数组中下一个字符的链接,不是吗?

它如何以正确的方式工作?我已经阅读了有关 memmove 的内容并阅读了有关指针的内容,但无法为自己探索此添加函数行为。

最佳答案

So prefix is a pointer of type char. In this terms prefix + 1 is the link to the next char in the array, isn't it?

不,又是。 prefix 不是指向 char 的指针,它是指向 charNPREF 指针数组。该数组的大小为

assert(sizeof(prefix) == NPREF * sizeof(char*)

是的,prefix + 1&prefix[0]之后下一个元素的地址,因为prefix(这是数组)衰减为指向的指针数组的第一个元素。所以

memmove(prefix, prefix + 1, (NPREF - 1) * sizeof(prefix[0]));

会将mommove NPREF - 1 元素移动一个位置。考虑到马尔可夫链是什么,听起来很合理,尽管我们看不到您的实现。如果改写为

memmove(&prefix, &prefix + 1, sizeof(prefix)/sizeof(prefix[0]);

然后它会memmove整个数组。

示例:

[0][1][2][3][4][5]...[n] /* prefix was */
[A][B][C][D][E][F]...[N]
memmove(prefix, prefix + 1, (NPREF - 1) * sizeof(prefix[0]));
[0][1][2][3][4][5]...[n] /* prefix is */
[A][A][B][C][D][E]...[M]

关于c - 马尔可夫链。实现添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38302808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com