所有的答案都非常感谢,并致力于所有那些致力于澄清这些事情的人 - 非常感谢你。为什么我可以更新指向(常量)字符串文字的指针?
我在学习C,刚刚完成了关于指针的章节。 在这本书中,我正在阅读一个示例代码,让我感到非常困惑。示例代码
部分:
...
1 char *inp_file = "";
2 char *out_file = "";
3 char ch;
4
5 while ((ch = getopt(argc, argv, "i:o:")) != EOF)
6 {
7 switch(ch)
8 {
9 case 'i':
10 inp_file = optarg;
11 break;
12 case 'o':
13 out_file = optarg;
14 break;
15
16 default:
17 fprintf(stderr, "Unknown option: '%s'/n", optarg);
18 return 2;
19 }
20 }
21
22 argc -= optind;
23 argv += optind;
...
我的理解是,char *inp_file = ""
和char *out_file = ""
是指向 字符串文字。
他们指着哪里?考虑到这是一个空“”
如何对它们进行更新(10号线,13),当它们被存储在只读存储器?
是char *pointer;
是否与char *pointer = "";
相同?
此外,我试过这个,它的工作。
#include <stdio.h>
int main(int argc, char *argv[])
{
char *msg = "Hello";
msg = "World";
printf("%s\n", msg);// Prints 'World'
}
我100%肯定char *msg = "Hello";
是一个指向字符串常量。
为什么它在只读存储器被更新为'世界'?
它是一个完全新的重新分配或什么?
我现在对我所知道的指针非常困惑。我在这里错过了什么?
请打开所有编译器警告。 –
'inp_file'和'out_file'是一些指向'char'块的指针。这个块如何存在是无关紧要的 - 它可以是一个字符串文字,它可以分配在堆上,它可以是堆栈中的本地数组。 'inp_file'可以同时指向一个字符串字符串,另一个时间指向一个堆块,第三次指向一个堆栈分配的数组。 –
指针在只读存储器中不是*,而是指向它的字符串。 –