打印两个具有相同值的字符串文字给出相同的地址
Printing two string literals with same value gives same address
谁能解释一下:
#include <stdio.h>
void some_fn(char *x)
{
printf("%d\n", x);
}
int main()
{
// They are stored on the same memory address
some_fn("A");
some_fn("A");
some_fn("B");
}
为什么会:
some_fn("A");
some_fn("A");
打印存储在同一个内存地址?
首先,关闭使用 %d
打印指针(就像您在编辑之前在代码中最初使用的那样)是无效的,并且会导致未定义的行为。您应该改用 %p
指针。
也就是说,对 some_fn
的两次调用都被传递了一个字符串文字,每个字符串文字恰好相同。字符串文字通常存储在内存的只读部分,当特定字符串文字多次出现在代码中时,编译器通常会使用该文字的单个实例。所以在那种情况下,当它出现在不同的地方时,该文字的地址是相同的。
谁能解释一下:
#include <stdio.h>
void some_fn(char *x)
{
printf("%d\n", x);
}
int main()
{
// They are stored on the same memory address
some_fn("A");
some_fn("A");
some_fn("B");
}
为什么会:
some_fn("A");
some_fn("A");
打印存储在同一个内存地址?
首先,关闭使用 %d
打印指针(就像您在编辑之前在代码中最初使用的那样)是无效的,并且会导致未定义的行为。您应该改用 %p
指针。
也就是说,对 some_fn
的两次调用都被传递了一个字符串文字,每个字符串文字恰好相同。字符串文字通常存储在内存的只读部分,当特定字符串文字多次出现在代码中时,编译器通常会使用该文字的单个实例。所以在那种情况下,当它出现在不同的地方时,该文字的地址是相同的。