gpt4 book ai didi

c - 指向指针和指针数组的指针

转载 作者:行者123 更新时间:2023-12-04 12:26:27 25 4
gpt4 key购买 nike

海湾合作委员会 4.4.4 c89

我理解指针没问题。但是,我正在加紧处理指针数组和指向指针的指针。

我一直在弄乱这个代码片段,并留下了我认为我理解的评论。

如果我对代码行的评论是正确的,非常感谢您提供任何建议?

void increment_ptr()
{
/* Static char array */
char src[] = "rabbit";
/* pointer to array of pointers to char's - create 6 pointers in this array */
char *dest[sizeof(src)];
size_t i = 0;

/* pointer to a char */
char* chr_ptr = NULL;
/* pointer to pointer that points to a char */
char** ptr_ptr = NULL;

/* chr_ptr pointer now points to the memory location where 'rabbit' is stored. */
chr_ptr = src;
/* ptr_ptr points to the first memory address of the pointer array of where dest is stored */
ptr_ptr = dest;

/* Deference chr_ptr and keep going until nul is reached 'rabbit\0' */
while(*chr_ptr != '\0')
/* deference ptr_ptr and assign the address of each letter to the momory location where
ptr_ptr is currently pointing to. */
*ptr_ptr++ = chr_ptr++;

/* reset the ptr_ptr to point to the first memory location 'rabbit' */
ptr_ptr = dest;

/* Keep going until NULL is found - However, my program never finds it, ends in UB */
while(ptr_ptr != NULL) {
/* Dereference what the pointer to pointer is pointing at the memory lcoation */
printf("[ %s ]\n", *ptr_ptr++);
}
}

最佳答案

每个部分下面的评论(我没有提到的部分是正确的):

/* Static char array */
char src[] = "rabbit";

这个数组不是静态的——它有auto存储持续时间。

/* pointer to array of pointers to char's - create 6 pointers in this array */
char *dest[sizeof(src)];

这是指向 char 的指针数组,而不是指向数组的指针。数组的长度是 7,因为 sizeof(src) 是 7(它包括 nul 字符串终止符)。

/* chr_ptr pointer now points to the memory location where 'rabbit' is stored. */
chr_ptr = src;

更准确地说,它指向src中的第一个字符,即"rabbit"中的'r'

/* ptr_ptr points to the first memory address of the pointer array of where dest is stored */
ptr_ptr = dest;

它指向dest数组中的第一个指针。

/* Keep going until NULL is found - However, my program never finds it, ends in UB */
while(ptr_ptr != NULL) {

正确 - 因为您从未初始化过 dest。您可以将 dest 的声明更改为:

char *dest[sizeof(src)] = { 0 };

...它会起作用。

关于c - 指向指针和指针数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457578/

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