sách gpt4 ai đã đi

Sự khác biệt về bộ nhớ giữa char *array và char array[] là gì?

In lại 作者:行者123 更新时间:2023-12-03 20:21:00 31 4
mua khóa gpt4 Nike

这个问题在这里已经有了答案:





String literals: pointer vs. char array

(1 câu trả lời)


4 个月前关闭。




当我执行下一个代码时

int chính()
{
char tmp[] = "hello";
printf("%lp, %lp\n", tmp, &tmp);
trả về 0;
}
我得到了相同的地址。但是对于下一个代码,它们会有所不同
int chính()
{
char *tmp = "hello";
printf("%lp, %lp\n", tmp, &tmp);
trả về 0;
}
你能解释一下这些例子之间的内存差异吗?

1 Câu trả lời

char tmp[] = "hello";是一个由 6 个字符组成的数组,初始化为 "hello\0" (它具有自动存储持续时间并驻留在程序堆栈中)。char *tmp = "hello";是指向 char 的指针用字符串文字的地址初始化 "hello\0"驻留在只读内存中(通常在可执行文件的 .rodata 部分中,除了少数实现之外的所有实现都是只读的)。
当您有 char tmp[] = "hello"; ,如上所述,在访问时,数组被转换为指向 tạm thời 的第一个元素的指针。 .它有类型 char * .当你取地址tạm thời (例如 &tmp )它将解析为相同的地址,但具有完全不同的类型。它将是一个指向数组的指针 char[6] .正式类型是char (*)[6] .从 类型控制指针运算 ,当您前进指针时,使用不同类型进行迭代将产生不同的偏移量。前进 tạm thời将前进到下一个char .推进地址tạm thời将前进到下一个 6 字符数组的开头。
当您有 char *tmp = "hello";你有一个指向 char 的指针.当你取地址时,结果是指向指针的指针char .正式类型是char **反射(reflect)了两个间接层次。前进 tạm thời前进到下一个 char .推进地址tạm thời前进到下一个指针。

关于arrays - char *array 和 char array[] 之间的内存区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67865746/

31 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com