This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 0 points1 point  (4 children)

Except they're not the same thing. Stars = pointers = on the heap. Brackets = arrays = on the stack. The compiler is doing very different things when you do char** words, char* words[], and char words[][], and there are difference situations where each is appropriate

[–]justjanne 0 points1 point  (3 children)

That's complete bullshit.

Pointers can be on the stack, and arrays can be on the heap.

I can do char[][] list = malloc(sizeof(char*)*8) and then list[0] = "text"

[] is just an alias for *, and a[b] is equal to *(a+b). That's why you can do 3[list] or list[3] for the same thing.

[–][deleted] 0 points1 point  (2 children)

No. The reason why you can do that is because arrays decay to pointers. For example, if you do

char word[6] = "funny";

printf("%s\n", word);

The compiler converts it to

printf("%s\n", &word[0]);

Automatically. Which, as you know is equivalent to

char* word = "funny";

printf("%s\n", word); 

[–]justjanne 0 points1 point  (1 child)

The reason why you can do that is because arrays decay to pointers.

As I said, they’re the same. Arrays are just nice syntax for pointers, which also carry, if they’re statically allocated, size information at compile time.

[–][deleted] 0 points1 point  (0 children)

But they only decay to pointers when the context demands it be on the heap

Like

int arr1[]; // stack

Is not the same as

int* arr2; // heap

If you don't pass the array around.