gpt4 book ai didi

c - 为什么此 C 代码示例使用指向指针的指针?

转载 作者:太空狗 更新时间:2023-10-29 16:06:52 26 4
gpt4 key购买 nike

以下代码示例演示了指针和数组之间的相似之处。在第二种方法中,作者将 cur_name 声明为指向指针的指针。我的问题是,为什么这是必要的?为什么他要声明一个新的指针而不是只使用原来的指针,names?我应该注意,当我摆脱 cur_name 并使用名称时,代码可以正常编译和运行,所以这是样式问题而不是功能问题吗?任何解释将不胜感激。

#include <stdio.h>

int main(int argc, char *argv[])
{
// create two arrays we care about
int ages[] = {23, 43, 12, 89, 2};
char *names[] = {"Alan", "Frank", "Mary", "John", "Lisa"};

// safely get the size of ages
int count = sizeof(ages) / sizeof(int);
int i = 0;

// first way using indexing
for(i = 0; i < count; i++) {
printf("%s has %d years alive.\n",
names[i], ages[i]);
}

printf("---\n");

// setup the pointers to the start of the arrays
int *cur_age = ages;
char **cur_name = names;

// second way using pointers
for(i = 0; i < count; i++) {
printf("%s is %d years old.\n",
*(cur_name+i), *(cur_age+i));
}

printf("---\n");

// third way, pointers are just arrays
for(i = 0; i < count; i++) {
printf("%s is %d years old again.\n",
cur_name[i], cur_age[i]);
}

printf("---\n");

// fourth way with pointers in a stupid complex way
for(cur_name = names, cur_age = ages;
(cur_age - ages) < count;
cur_name++, cur_age++)
{
printf("%s lived %d years so far.\n",
*cur_name, *cur_age);
}

return 0;
}

最佳答案

代码使用指向指针的指针来表示指向 C 字符串数组的指针。也就是说,cur_name 是指向名为 names 的 C 字符串数组的指针。由于 C 中的字符串本身由指向 char 的指针表示,因此指向此类指针数组的指针将成为指向指针的指针。

Why does he declare a new pointer instead of just using the original pointer, names?

因为 names 不是指针,它是一个指针数组(看到声明后的方括号了吗?这就是使 names 成为数组的原因。单个星号前面与数组元素的类型有关,在本程序中为char*

创建一个数组增加了一个间接级别:要指向一个 int 数组,您需要 int*,但要指向一个 int 数组* 你需要一个 int** 指针。

关于c - 为什么此 C 代码示例使用指向指针的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26204011/

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