anonymous
  • anonymous
main() { char *s[] = { "apple","mango","berry","cherry"}; printf("%c\n",*(s+2)); printf("%c\n",( *s+2)); } i tried this program and i got some un xpected results.... u ppl can find an xplanation for this?
Computer Science
  • Stacey Warren - Expert brainly.com
Hey! We 've verified this expert answer for you, click below to unlock the details :)
SOLVED
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
chestercat
  • chestercat
I got my questions answered at brainly.com in under 10 minutes. Go to brainly.com now for free help!
KonradZuse
  • KonradZuse
well 1 not too sure what the * is doing there, also when dealing with an array you want to use the s[] not s... FOr example s[0] is apple, s[1] is mango etc.....
rsmith6559
  • rsmith6559
The first printf looks to dereference s+2, the second looks like it dereferences s and adds 2 to it.
anonymous
  • anonymous
@rsmith6559 sir please try compiling it ....it was not that easy

Looking for something else?

Not the answer you are looking for? Search for more explanations.

More answers

anonymous
  • anonymous
Since you have defined s as a pointer to a character array (char **), dereferencing s will give you the pointer to a string (like e.g. 0x400624). Since you said you want to print this value as a character (since you use '%c' in printf), these addresses are somehow translated into characters. I don't know how that translation is done, but it could result in printing some weird characters on your screen.
anonymous
  • anonymous
no i dont think so....coz we all get the same result... i mean we all got a star....so it cant be a random adrees in RAM
anonymous
  • anonymous
I did not get a star, but a 0 and an &. During compilation, the compiler will put those constant strings somewhere in the executable (if you're on Linux, try string to find such strings). Those addresses are therefor fixed once you compiled the code, so you will see the same symbol each time you run that executable.
anonymous
  • anonymous
ohh ok wait lemme run on linux an @slotema plz do wait i have another query
anonymous
  • anonymous
ok fine my next one
anonymous
  • anonymous
#include int main() { int x[3][5]={ {18,20,13,24,35}, {7,8,6,9,10},{19,22,30,21,15}} ; int *n=&x[0][0]; std::cout<<"endl:- "<<(*(n+3)+1) <<":"<<*(*x+2)+5<<"\n"; std::cout<<"endl:- "<<*(*(x+2)+1) <<":"<<*(x[1]+2)+5; } u have amy idea how that *(n+3)+1 works?
anonymous
  • anonymous
*any
anonymous
  • anonymous
int main() { int x[3][5]={ {18,20,13,24,35}, {7,8,6,9,10},{19,22,30,21,15}} ; int *n=&x[0][0]; std::cout<<"endl:- "<<(*(n+3)+1) <<":"<<*(*x+2)+5<<"\n"; std::cout<<"endl:- "<<*(*(x+2)+1) <<":"<<*(x[1]+2)+5; }
anonymous
  • anonymous
So n points to the first element from x (which is 18). *(n+3) take the fourth (n, n+1, n+2, n+3) element in the array (which is 24). That 24 is than incremented by 1.
anonymous
  • anonymous
i thot it's a 2-d array so incrementin n by 3 shud make it point to the 3-row instead?
anonymous
  • anonymous
if you want it to act as a 2-D array, you should change the definition of n. Right now, n is just an int *, so it acts as a 1-D array.
anonymous
  • anonymous
so if i make it like int ** it's gonna change it's behavior?
anonymous
  • anonymous
so what if n is an int ** i got smthn like 12
anonymous
  • anonymous
It a bit more complicated than that. If you want to use a pointer as a 2-D array, the compiler should know the size of the second dimension. Only if that size is known, the compiler will know what do with a statement like n+1. Therefor, you should define n as `int (*n)[5]` (post #6 in http://devmaster.net/forums/topic/12966-how-to-create-a-pointer-to-2d-array-in-c/page__view__findpost__p__69890).
anonymous
  • anonymous
it's about making an array of pointers r8? i was trying to work on pointer arithmetic
anonymous
  • anonymous
what's if i declare a double pointer say t int **t=&x[0][0]; and now i d like to use (*(t+3)+1) i expected a segmentation fault but i dint get it *(*(t+3)+1) gives me a segmentation fault....i convinced my self saying that ther's no x[3][1]; am i right?
anonymous
  • anonymous
There is indeed no x[3][*]. Try with 0, 1 or 2. I can't get the int ** pointer to compile properly without any errors. The solution in my previous post works for me.
anonymous
  • anonymous
did u try this (*(t+3)+1) i got a warning but i got a value 39
anonymous
  • anonymous
My problem is that my compiler (GCC-4.7) won't accept `int **t = &x[0][0];` But as long as it works for you, that's the most important thing.
anonymous
  • anonymous
it wont? :-/ but i want an xplanation :(
anonymous
  • anonymous
i got a 4.6.3
anonymous
  • anonymous
Did you already try changing the 3 into 2 for `*(*(t+3)+1)`?
anonymous
  • anonymous
no a min
anonymous
  • anonymous
ops sory i got a 39 for (*(t+2)+1) abd 12 for (*(t+3)+1)
anonymous
  • anonymous
The thing with `(*(t+2)+1)` is that you're derefencing t once. Whatever you print is not the value of the array, but again a pointer to the array. Try dereferencing the whole thing.
anonymous
  • anonymous
that gives a segmentation fault
anonymous
  • anonymous
may be it's linearly accesing the array on memory now taking sizeof(t) and traversing over?
anonymous
  • anonymous
My guess is that it's somehow due to the fact that the compiler does not know what to do with a t+1. How many bytes would it skip? Try the approach I mentioned earlier (int (*t)[5]).
anonymous
  • anonymous
i kno that would work it's simply creating an array of pointer and storing the address of beginning of row in that array i jus wanna jus more on pointer arithmetic it kinda confuses me everytime

Looking for something else?

Not the answer you are looking for? Search for more explanations.