- 1
Why these code give different answers
https://code.sololearn.com/cenGQoL14t06/?ref=app https://code.sololearn.com/ceXpvgdt42v2/?ref=app
9 Respostas
+ 6
#include <iostream>
using namespace std;
int main() {
char a[]="hello";
char*p=a;
cout<<*(p+4);
return 0;
}
This code will print 5th character becoz array start from 0 so 4th character will be 0
*(p+1) means p is a intital address means *(1000+1) which represent first index here in cout u written cout<<*(p+4) means *(1000+4) which represent 5th index so Output is (o).
+ 6
Your this line
char *p="solo learn";
printf ("%s",(p+5));
p+ 5 means suppose base address of p is 100 then 100+5 means 5th char which is space after that it will print complete string . But if u will write printf("%s",*(p+5) ) this will give you erros .
char arr[]="health";
printf ("\n%s",arr+5); simple u defined health String in arr which is char type arr+5 which will represent particular index means if i suppose address of arr is 100 then 100+5 =105 which represent 6th index becoz array start from zero so 6th char will be print.
+ 6
char *p="hello";
is INVALID in standard C++. It is valid C, but not C++.
C++ allowed this for C compatibility, but deprecated, in C++98 and C++03. The special rule allowing it was removed in C++11, which cleaned up many things.
One valid C++ declaration is
âź const char *p="hello";
The type of the string literal "hello" is array `const char[6]`. That works as initializer for a `const char*` pointer because there is an automatic type DECAY that converts the array expression to pointer-to-first-item. There is a similar type decay for functions.
However, this needlessly discards the information about the length of the string that pointer `p` points to the first `char` in.
+ 6
A better declaration is therefore
âź const auto& s = "hello";
where the type of `s` is deduced as reference to an array `const char[6]`, i.e. with known length. It has 6 items, not 5 characters h, e, l, l, o, because there is an automatic nullvalue at the end. You can't avoid that terminating nullvalue in a string literal.
Where you want natural and easy access to the string length you can instead do
âź constexpr string_view s = "hello";
where `string_view` is `std::string_view` from the `<string_view>`Â header. Then you can write `s.length()` to get the length, instead of with the array `sizeof(s) - 1`.
---
âź printf("%s",*p);
This tells `printf` to assume that the argument is a pointer to nullterminated string. But the actual argument is a single `char`. So it has UNDEFINED BEHAVIOR.
The ease with which one can inadvertently create UB with `printf` is a main reason why C++ learners are adviced to use C++ iostreams, not C `printf`.
However, a modern compiler told to produce most all useful warnings (fo
+ 6
Saumya Mishra welcome
+ 4
What are trying to achive from theses codes ?đ§
They are giving different outputs because they have been programmed to do so.
If you want both of them to achieve same answer then just alter the values accordingly.
+ 1
Arsenic okay
+ 1
àœÄ±ÉŹÄ±ÆÄ
ɱıÊɧàœÄ
thanks for infođ
0
àœÄ±ÉŹÄ±ÆÄ
ɱıÊɧàœÄ
đđ