Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.9k views
in Technique[技术] by (71.8m points)

c - pointer of unsigned char array and his pointer has the same value, why?

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?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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].


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...