Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have noticed a behaviour that I can't explain it. `

typedef unsigned char mac_address_t[6];
mac_address_t* c = malloc(sizeof(mac_address_t)); 
printf("%p 
", c); 
printf("%p 
", (*c));`

the value printed are the same. another way to print the value is

printf("%p 
", &(*c)[0]); 

but this one I can understand, the first start access to the array and [] access to the element of the array. I can't understand the logic behind c and *c in this situation. Also if the value it's the same why I can't do c[i] to access to the element? Someone can help me?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
2.0k views
Welcome To Ask or Share your Answers For Others

1 Answer

c is a pointer to an array.

*c is the array pointed at by the pointer c.

Arrays in expressions are converted to a pointer to the first element of the array. (A few exceptions exists).

Therefore *c is converted to the pointer to the first element of the array.

Typically the starting point of an array and the starting point of the first element of an array are the same.

This is why c and *c has the same address.

&(*c)[0] is explicitly expressing "the address of the first element of the array *c", which is the same as what is converted from *c.

c is a pointer to an array, so arrays, not elements of the arrays, are obtained by c[i].


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...