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 |
我的理解是,*我的指针(带星号*)应该给我字符串的值。但是我的指针(没有星号)不应该给我字符串的值,但是它应该只给我内存地址,但是当我运行这个代码时,即使我没有把星号*放在前面,我也会得到字符串的值。我希望这次我能说清楚。
在这里: </P >
1 2 |
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
第一部全,
1 | my_pointer = &words[0]; |
好的
在处理您的代码的编译器是exactly为它是需要的。 </P >
在
严格的说英语国家,《夏娃的编译器是不需要的检查,这是
在C,ARRAY NAME IS也分到一元,在你的案例
和你assign它到另一个指针的同型的,所以这是合法的。 </P >
关于字符串在C,它是一chars阵列结尾与