gcc 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++);
}
}
Run Code Online (Sandbox Code Playgroud)
每个部分下面的评论(我没有提到的位是正确的):
/* Static char array */
char src[] = "rabbit";
Run Code Online (Sandbox Code Playgroud)
此数组不是静态的 - 它具有auto存储持续时间.
/* pointer to array of pointers to char's - create 6 pointers in this array */
char *dest[sizeof(src)];
Run Code Online (Sandbox Code Playgroud)
这是一个指向char的指针数组,而不是指向数组的指针.数组的长度为7,因为它sizeof(src)是7(它包括nul字符串终止符).
/* chr_ptr pointer now points to the memory location where 'rabbit' is stored. */
chr_ptr = src;
Run Code Online (Sandbox Code Playgroud)
更准确地说,它指的是第一个字符src,即'r'in "rabbit".
/* ptr_ptr points to the first memory address of the pointer array of where dest is stored */
ptr_ptr = dest;
Run Code Online (Sandbox Code Playgroud)
它指向dest数组中的第一个指针.
/* Keep going until NULL is found - However, my program never finds it, ends in UB */
while(ptr_ptr != NULL) {
Run Code Online (Sandbox Code Playgroud)
正确 - 因为你从未初始化dest.您可以将声明更改为dest:
char *dest[sizeof(src)] = { 0 };
Run Code Online (Sandbox Code Playgroud)
......它会起作用.
| 归档时间: |
|
| 查看次数: |
911 次 |
| 最近记录: |