0
点赞
收藏
分享

微信扫一扫

指针初步

1.指针变量和地址

1.1取地址操作符(&)

  在C语言中创建变量就是向内存申请空间。用操作符(&)取出地址。如:

#inculde <stdio.h>

int main()

{

   int a = 10;

   &a;

   printf("%p", &a);

   return 0;

}

1.2指针变量与解引用操作符(*)

1.2.1指针变量

通过取地址操作符(&)拿到地址是一个数值,如:0x006FFD70,这个数值需要存储起来,以便使用。于是存储在指针变量中。

指针变量是一种变量,用来存放地址,存放在指针变量的值都会理解为地址。

如:

#inculde <stdio.h>

int main()

{

   int a = 10;

   int *pa = &a;//取出a地址并存放指针变量pa中

   return 0;

}

1.2.2解引用操作符

C语言中拿到指针,就能通过指针找到指向对象。需要解引用操作符(*)。

#inculde <stdio.h>

int main()

{

   int a = 10;

   int *pa = &a;//  *说明pa是指针变量,int说明pa指向是整型(int)类型对象

   *pa = 0;

   return 0;

}

上面代码使用解引用操作符,*pa指通过pa中存放的地址,找到指向空间。*pa就是a变量,*pa = 0,就是把a改成0。

1.3指针变量大小

32位平台下地址是32个bit位,指针变量大小是4字节。

64位平台下地址是62个bit位,指针变量大小是5字节。

注意指针变量大小和类型无关,只要指针类型的变量,在相同的平台下,大小都是相同的。

2.指针变量类型的意义

2.1指针的解引用

指针变量的大小和类型无关,只要指针变量,在同一平台下,大小都是一样的。但指针类型有特殊意义。

//代码1

#inculde <stdio.h>

int main()

{

   int a = 0x11223344;

   int *pi = &a;

   *pi = 0;

   return 0;

}


//代码2

#inculde <stdio.h>

int main()

{

   int a = 0x11223344;

   char *pi =(char *)&a;

   *pi = 0;

   return 0;

}

调试中会看到代码1将n的4个字节全部改为0,代码2只将n的第一个字节改为0。

指针的类型决定了,对指针解引用时有多大权限。




举报

相关推荐

0 条评论