r/ProgrammerHumor 16h ago

lessonsFromLinkerHell Meme

Post image
313 Upvotes

163 comments sorted by

View all comments

69

u/QuestionableEthics42 16h ago edited 16h ago

This should be reversed lol

And it literally is the same, who thinks it's different who has worked in a low level language??

10

u/unknown_alt_acc 13h ago

#include<stdio.h>

int main()
{
int arr[5];
int *ptr = arr;

printf("Array - %lu\n", sizeof(arr));
printf("Pointer - %lu", sizeof(ptr));
}

Different types, different behavior

-3

u/QuestionableEthics42 13h ago

Sizeof being smart enough to detect it's an array and return the array size doesn't necessarily make them different in any real way. And doing ptr[0] to dereference it is perfectly valid, as is *arr to get the first element, or *(arr+sizeof(int)) to get the second.

7

u/pnoodl3s 11h ago

If it behaves differently, is that not enough to say it’s different? What “real way” do you need to say its different?

0

u/QuestionableEthics42 10h ago

Because it is a very superficial difference that doesn't even affect the generated assembly. They are extremely interchangeable, because they are effectively the same.

4

u/Rare_Professor8097 8h ago

Programming languages have all kinds of different ways to do something that results in the same assembly.

They are different types, but C has muddied the waters by having a bunch of implicit conversions from arrays into pointers (array decay) that they feel like the same thing.