初学指针的烦恼终于解决了,int *p这个*到底是谁的?

对于指针变量的申明,很多案例代码中,都这么写:

#include  
int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */
/*以下省略*/
...

一直以来,我都以为这个*跟p是一起的,直到我又看了一些案例:

u8* Send_CANFrame(CanTxMsg* TxMessage,u8 CANStype,ErrorStatus* err)

顿时,我就迷糊了,这个*怎么又可以在变量前面,又可以在结构体后面?
为了打破砂锅问到底,我先做了如下测试:

#include 
#include  
int main ()
{
   int  var1 = 20;   /* 实际变量的声明 */
   int* p1;          /* 指针变量的声明 */ 
   int * p2;       
   int *p3;
   p1 = &var1;        /* 在指针变量中存储 var1 的地址 */
   p2 = &var1;        /* 在指针变量中存储 var1 的地址 */
   p3 = &var1;        /* 在指针变量中存储 var1 的地址 */
   printf("变量var1的地址为: %p\n", &var1  );
   printf("指针变量p1存储的地址为: %p\n", p1 );
   printf("*p1的值为: %d\n", *p1 );/*访问以变量p的值为地址的变量,及var1的值*/
   printf("指针变量p2存储的地址为: %p\n", p2 );
   printf("*p2的值为: %d\n", *p2 );/*访问以变量p的值为地址的变量,及var1的值*/
   printf("指针变量p3存储的地址为: %p\n", p3 );
   printf("*p3的值为: %d\n", *p3 );/*访问以变量p的值为地址的变量,及var1的值*/
   system("pause");
   return 0;
}

仿真结果为:
初学指针的烦恼终于解决了,int *p这个*到底是谁的?_第1张图片
这么看来,编译器会忽略没有意义的空格,也就是int* p1,int * p2和int *p3其实是一样的。
最后,在网上找到了一个一段话,感觉说的很有道理:
初学指针的烦恼终于解决了,int *p这个*到底是谁的?_第2张图片
总结下:
1)实际上,int
p1意思是变量p的类型是int
,所以不是变量前加星号,而是星号是int类型的一部分!

你可能感兴趣的:(stm32问题解读)