是否可以将文本字符串分配给指针?
is it possible to assign string of text to pointer?
当我们这样做时 :
char *p;
p="Hello Whosebug";
printf("%s",p);
它会打印 Hello Whosebug 但根据我的理解,这是怎么可能的指针只能保存内存地址而不是文本字符串,另外为什么我们不应该像这样取消引用指针printf("%s",*p);
而不是 p ?因为只有 p 的意思是给我们指针保存的内存地址而不是内容!任何解释!谢谢。
“Hello Whosebug”其实是存在内存中的。所以 p = "Hello Whosebug" 会将 p 赋值给 "Hello Whosebug"
的起始地址
表达式中使用的数组被隐式转换(极少数例外)为指向其第一个元素的指针。
来自 C 标准(6.3.2.1 左值、数组和函数指示符)
3 Except when it is the operand of the sizeof operator or the unary &
operator, or is a string literal used to initialize an array, an
expression that has type ‘‘array of type’’ is converted to an
expression with type ‘‘pointer to type’’ that points to the initial
element of the array object and is not an lvalue. If the array object
has register storage class, the behavior is undefined.
在此代码段中
char *p;
p="Hello Whosebug";
字符文字 "Hello Whosebug"
具有数组类型 char[20]
并用作初始值设定项,它被转换为指向其第一个元素的指针。其实写
也是一样的
p = &"Hello Whosebug"[0];
关于取消引用指针 p,表达式 *p
的类型为 char
,但转换说明符 %s
需要一个类型为 char *
的参数。
因此这个调用
printf("%s",*p);
调用未定义的行为。
您可以使用 char * 并使用该地址,或者您可以只为 char * 分配内存并使用它:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char a[] = "Hello Whosebug!";
printf("%s\n", &a);
char *b = (char *) malloc(21);
strcat(b, "Hello Whosebug!");
printf("\n%s", b);
free(b);
return 0;
}
当我们这样做时 :
char *p;
p="Hello Whosebug";
printf("%s",p);
它会打印 Hello Whosebug 但根据我的理解,这是怎么可能的指针只能保存内存地址而不是文本字符串,另外为什么我们不应该像这样取消引用指针printf("%s",*p);
而不是 p ?因为只有 p 的意思是给我们指针保存的内存地址而不是内容!任何解释!谢谢。
“Hello Whosebug”其实是存在内存中的。所以 p = "Hello Whosebug" 会将 p 赋值给 "Hello Whosebug"
的起始地址表达式中使用的数组被隐式转换(极少数例外)为指向其第一个元素的指针。
来自 C 标准(6.3.2.1 左值、数组和函数指示符)
3 Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.
在此代码段中
char *p;
p="Hello Whosebug";
字符文字 "Hello Whosebug"
具有数组类型 char[20]
并用作初始值设定项,它被转换为指向其第一个元素的指针。其实写
p = &"Hello Whosebug"[0];
关于取消引用指针 p,表达式 *p
的类型为 char
,但转换说明符 %s
需要一个类型为 char *
的参数。
因此这个调用
printf("%s",*p);
调用未定义的行为。
您可以使用 char * 并使用该地址,或者您可以只为 char * 分配内存并使用它:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char a[] = "Hello Whosebug!";
printf("%s\n", &a);
char *b = (char *) malloc(21);
strcat(b, "Hello Whosebug!");
printf("\n%s", b);
free(b);
return 0;
}