关于C#:将指针类型分配给字符串类型

Assign pointer type to string type

考虑到必须在%p中分配指针,我希望出现编译错误,但下面的代码不会在我有意将指针分配给%s时给我带来错误。通过添加一个和号&;,它应该生成数组的地址并将内存地址分配给%p,而不是给出字符串的值。除非我取消对指针的引用,但我根本不取消对指针的引用,否则在printf中,我从未在指针前面放置星号*。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
   char words[] ="Daddy\0Mommy\0Me\0";
   char *my_pointer;
   my_pointer = &words[0];

   printf("%s
"
, my_pointer);
   return 0;

}

请看这个:

1
2
printf("%s
"
, my_pointer);

我的理解是,*我的指针(带星号*)应该给我字符串的值。但是我的指针(没有星号)不应该给我字符串的值,但是它应该只给我内存地址,但是当我运行这个代码时,即使我没有把星号*放在前面,我也会得到字符串的值。我希望这次我能说清楚。


在这里: </P >

1
2
printf("%s
"
, my_pointer);

%s,expects A char*和硬件的my_pointer是一个char*这一点的阵列控股的A nul封端的字符串,printf有好的和理想的问题是有效的。相关的报价从C11的标准(重点矿山): </P >

7.21.6.1 The fprintf function

[...]

  • The conversion specifiers and their meanings are:
    [...]
    s - If no l length modifier is present, the argument shall be a pointer to the initial
    element of an array of character type. 280) Characters from the array are
    written up to (but not including) the terminating null character. If the
    precision is specified, no more than that many bytes are written. If the
    precision is not specified or is greater than the size of the array, the array shall
    contain a null character.
    [...]
  • 国际海事组织(IMO),你是在这里被混淆的: </P >

    taking into account that a pointer has to be assigned in %p, but the codes below doesn't give me error when i intentionally assign a pointer to %s

    第一部全,%s%p等是转换说明符。他们是用在一些函数式的printfscanf等。 下一步,你是一个在中型之分。所以在这里: </P >

    1
    my_pointer = &words[0];

    好的&words[0]AS AS my_pointerIS型char*。。。。。。。分配这些双理想,因此是有效的作为都是同样的类型。 </P >


    在处理您的代码的编译器是exactly为它是需要的。 </P >

    %s格式说明符tells printf()到希望的const char *为相应的argument。。。。。。。然后,它deems指针是地址的第一个元素的一个数组char和打印每一个charfinds它直到它的遭遇与一个值(零'\0')。 </P >

    严格的说英语国家,《夏娃的编译器是不需要的检查,这是my_pointer,或可以implicitly转换到一const char *。。。。。。。然而,最现代的编译器(assuming格式的字符串是supplied在编译时)做那。 </P >


    在C,ARRAY NAME IS也分到一元,在你的案例words均值和&words[0]当为一分,他们有同样的价值。 </P >

    和你assign它到另一个指针的同型的,所以这是合法的。 </P >

    关于字符串在C,它是一chars阵列结尾与'\0',与它的名称的第一个字符的指针。 </P >