Re:Everything I wish I knew when learning C
by poepie on Monday November 28, 2022 @01:29PM
(#33777468)
In the first example a & b are variables, which can be assigned to each other. In the second a & b are pointers, but b is fixed, so you can not assign a value to it.
Re:Everything I wish I knew when learning C
by yakubin on Monday November 28, 2022 @07:40PM
(#33782085)
They’re not pointers. sizeof a == 4*sizeof(int), not sizeof(int*).
Re:Everything I wish I knew when learning C
by chipsa on Tuesday November 29, 2022 @09:48AM
(#33788237)
They're pointers, just weird ones. The compiler knows it's an array, so it gives the result of the actual amount of space it takes up. If you passed it into a function, and used the sizeof operator in the function, it'd give `sizeof(int *)`. Because sizeof is a compile-time operation, so the compiler still knows that info for your example.
Re:Everything I wish I knew when learning C
by yakubin on Tuesday November 29, 2022 @11:17AM
(#33789455)
That jest means it decays into a pointer after being passed as a function argument. In the example given however it’s not a pointer. Just like it wouldn’t be inside a struct.
Re:Everything I wish I knew when learning C
by fsociety on Monday November 28, 2022 @05:43PM
(#33780954)
Essentially ‘b = a’ in the second example is equivalent to ‘b = &a[0]’ or assigning an array to a pointer.
This is because if you use an array in an expression, it’s value is (most of the time) a pointer to the array’s first element. But the left element is not an expression, therefore it is referring to b the array.
Example one works because no arrays are referred to in the expression side, so this shorthand so to speak is avoided.
Arrays can be a painful edge in C, for example variable length arrays are hair pulling.
This compiles:
But this does not: That seems like an arbitrary restriction to me.