my c code giving same output for every input of p?
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
int main (int argc , char **argv ) {
// your code goes here
char *p ;
p ="hello";
printf("%s",*&*&p );
return 0;
} |
它为p、*&p、*&*&p提供相同的输出。这怎么可能?
- 相反,你期待什么?
- p的值怎么可能是hello?P商店地址。
- 有人能一步一步地解释这段代码吗?
- p存储字符串"hello"开始的地址。
p是指向字符串"hello"的指针。&;P是P的地址,因此*&P将是P地址处的值,它也是指向字符串"hello"的指针。
- 然后,如果字符S P ="你好";printf("%s",P);它打印错误但char * P;P ="你好";printf("%s",P);它打印你好
- 因为P P是指字符的字符而不是单一的字符串。char * P,P的指针指到的字符串。看到stackoverflow.com / / / 2938924 4183255内容的理解。
- 这是真的helpful后visualizing。这也就是我要找的。谢谢alot。:)
*表示给出内存中这个位置的任何内容。&给出了这个对象的内存地址。
因此:p是字符串hello开始的地址。*&p是指给我P的位置(即hello起始的地址)。*&*&p是指给我P所在地的一切。
所以所有这些都给了你一个(2)。
- 但P不能商店的价值,它应该有地址吗?
- 这样的地址,stored在p也发送到printf和printf开始印刷字符数个地址,直到它看到的\0
- 当我们给P = 20,和printf("% D"* & AMP AMP &;*;P);然后,它不会工作,对吗?
- @ nishantkumar吗是的,它会试图从存储器读地址20,也可能是无效的,所以你会得到帮助的犯规。
- nishantkumar @你应该得到的compiler错误是因为你是一个assigning int到char*
- 然后,如果字符S P ="你好";printf("%s",P);它打印错误但char * P;P ="你好";printf("%s",P);它打印你好
- @ nishantkumar是的先生,你不能assign字符串(这是一个阵列的chars)到一个单一的char。
- 最后一个问题的原因,并在char * P;P ="你好",P店地址字符串PF你好
- ITS技术在商店的地址的字符串,当bcz给P = 20世纪它,它的商店的地址。
- 它nishantkumar @店的地址,字符串的开始。"试着printf("%p", p)看到的地址,printf("%c", *p)为第一个字符,printf("%c", *(p+1))*第二字符和等等。
- 在C,"p是"字符串"也不是的先生。字符串的字符序列的阵列/起来和包括零字符。不在字符串的指针。p也char *类型的指针。p腹部的价值的一个地址。p腹部的"价值"的地址的第一字符的字符串。
- chux @ *你是的先生,但有时它的easier去想"指针到一个字符的阵列,terminated零号的字符串,即使,虽然这是不technically是的先生。