C 指向指针和指针数组的指针
通用条款4.4.4 c89 我能理解指针。然而,我正在逐步升级到指针数组和指向指针的指针 我一直在处理这段代码片段,并留下了我认为我理解的注释 如果我对代码行的评论是正确的,非常感谢您的建议C 指向指针和指针数组的指针,c,pointers,C,Pointers,通用条款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 ar
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++);
}
}
每个部分下面的注释(我没有提到的部分是正确的):
此阵列不是静态的-它具有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字符串终止符)
更准确地说,它指向src
中的第一个字符,即“rabbit”
中的'r'
它指向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 };
…它会工作。错误是当您将dest分配给ptr\u ptr时,这实际上是一个未初始化的字符指针数组,通过while循环将失败
/* 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++);
}
我建议您阅读在线C-FAQ的第6节:他在上一个循环中设置了
dest
的前6个成员的值(尽管第七个成员尚未初始化)。您是对的,我错过了这一部分。但他确实还是跳过了“\0”
/* Keep going until NULL is found - However, my program never finds it, ends in UB */
while(ptr_ptr != NULL) {
char *dest[sizeof(src)] = { 0 };
/* 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++);
}