我是一个新的CC++,我知道第一个是指针,第二个是字符数组。
char *x="hello world";
char x[]="hello world";
我知道第一个是指针,第二个是字符数组,但是,我不明白char*x是如何工作的。
int a=1;
int *b=&a;
但是,"hello world "的内存地址是什么,如何应用于x指针?
在C语言中,所有的文字字符串都是以不可修改的方式存储的(但是,我不知道为什么会这样)。不 常量)的字符数组,包括空端符。
当你这样做时。
char *x = "hello world";
你初始化了 x
指向这样一个数组的第一个元素(请记住,数组会衰减为指向其第一个元素的指针)。
这类似于:
char s[] = "hello world";
char *x = s;
但不同的是这个例子中的字符串是可以修改的。
让我们举个例子。
char *b = "john"; 这里b是一个指针变量.(b)的大小是4个字节,你必须明白一个ting p和&p是不一样的,在上面的例子中b是存储在堆栈,但是 "john "是存储在内存的代码部分,char *b = "john"; b=petter;b++是一个有效的.char *b = "john"; b[0]=n.
语句'char *b = "john "创建了一个字符串文字。字符串的字元被大多数编译器存储在内存的只读部分。C和C++标准规定,字符串字元有静态的存储时间,任何修改它们的尝试都会给出未定义的行为。
简短的回答:它们基本上是一样的。
我想你在这里忽略的是,如果你创建一个Array,基本上会创建一个指向Memory中第一个元素的指针。(这个页面很好地总结了这一点。https:/www.studytonight.comcpointers-with-array.php#:~:text=Pointer%20 and%20Arrays%20in%20C,als%20allocated%20by%20the%20compiler.&text=We%20can%20also%20declare%20a,point%20to%20the%20array%20arr%20。...)所以呢
char *x="hello world";
的作用是创建字符串 "hello world",并将第一个字符的位置存储在指针变量x中,这与
char x[]="hello world";
正因为如此,下面的代码对x和y产生相同的输出。
char *x= "hello world";
char y[] = "hello world";
printf("x[0]: %c \n", x[0]);
printf("y[0]: %c \n", y[0]);
printf("x: %s \n", x);
printf("y: %s \n", y);
X和Y的内存地址是多少?
"hello world"
?
在执行之前,没有人可以说。字符串的确切地址 "hello world"
是由操作系统在执行时决定的,并且进一步取决于你的实现和资源。程序对字符串文字在内存中的确切位置没有影响。
"它如何应用于指针
x
? 谁能解释一下"?
char *x = "hello world";
x
是一个指向 char
(你已经知道)。"hello world"
是一个存储在只读内存中的字符串文字,不可修改。
通过这条语句,指针 x
由这个字符串字面的第一个元素的地址初始化,实际上 h
,在只读存储器内。
由于字符串字面意义自动评估为指向其第一个元素的指针,所以不需要使用 &
运营商。
来看看。
https:/en.cppreference.comwcpplanguagestring_literal。
https:/en.wikipedia.orgwikiString_literal。
侧记。
x
指针 const char
(const char *x
),如果它只应指向字符串文字。这样一来,程序将永远不会因为任何无意的写尝试修改字符串文字而引发任何未定义的行为。