KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Given that the name of an array is actually a pointer to the first element of an array, the following code: #include <stdio.h> int main(void) { int a[3] = {0, 1, 2}; int *p; p = a; printf("%d\n", p[1]); return 0; } prints 1 , as expected. Now, given that I can create a pointer that points to a pointer, I wrote the following: #include <stdio.h> int main(void) { int *p0; int **p1; int (*p2)[3]; int a[3] = {0, 1, 2}; p0 = a; p1 = &a; p2 = &a; printf("p0[1] = %d\n(*p1)[1] = %d\n(*p2)[1] = %d\n", p0[1], (*p1)[1], (*p2)[1]); return 0; } I expected it to compile and print p0[1] = 1 (*p1)[1] = 1 (*p2)[1] = 1 But instead, it goes wrong at compile time, saying: test.c: In function ‘main’: test.c:11:5: warning: assignment from incompatible pointer type [enabled by default] Why is that assignment wrong? If p1 is a pointer to a pointer to an int and a is a pointer to an int (because it's the name
Tags (comma-separated)
Save Edits
Cancel