【C语法学习】初识指针

1 基本概念

  1. 在C语言中地址就是指针,两者是等价的;
  2. 存放指针的变量就是指针变量;
  3. 指针就是用来存放地址的,存放谁的地址,就说指针指向谁(这里的“谁”范围就很宽,比如基本类型变量、数组、结构体等等);
  4. 指针存在的意义就是通过指针找到其指向的对象;

2 指针定义

指针变量的定义如下:

写法1int* p = &a;
写法2int *p = &a; 

详细说明如下:

  1. 变量名是p,不要被写法2迷惑;
  2. *表示p是一个指针,即p是一个指针变量;
  3. int表示p所指向的对象是int型;
  4. p=&a表示取变量a的地址存放于指针变量p中,即p指向a;
  5. 注意口头语一般说p是个指针,其实是指p是个指针变量;

两种写法的区别:

  1. 写法1在定义一个指针的时候看着更清晰明确;
  2. 写法2在定义多个指针的时候更有优势,其明确指明*和哪一个指针相结合,例如:
int *p1, *p2, *p3;//定义三个指针p1,p2,p3
int* p1, p2, p3;  //定义1个指针p1和两个int型变量p2,p3

3 指针大小

  1. 不管指针指向什么类型,都是指针变量,指针变量是用来存放地址的;
  2. 指针变量的大小取决于一个地址存放的时候需要多大的空间;
  3. 32位平台上的地址:32bit - 4byte,所以指针变量的大小是4个字节;
  4. 64位平台上的地址:64bit - 8byte,所以指针变量的大小是8个字节;

4 示例

代码如下图所示:

int main()
{
   //
   puts("打印a的值和地址");
   int a = 10;
   printf("a=%d\n", a);
   printf("&a=%p\n", &a);
   puts("");
   //
   puts("打印p的值和p解引用后的值");
   int* p = &a;
   printf("p=%p\n", p);
   printf("*p=%d\n", *p);
   puts("");
   //
   puts("通过对p解引用间接修改a的值");
   *p = 20;
   printf("*p=%d\n", *p);
   printf("a=%d\n", a);
   puts("");
   //
   puts("不同类型指针大小");
   printf("char*   = %zu\n", sizeof(char*));
   printf("short*  = %zu\n", sizeof(short*));
   printf("int*    = %zu\n", sizeof(int*));
   printf("long*   = %zu\n", sizeof(long*));
   printf("float*  = %zu\n", sizeof(float*));
   printf("double* = %zu\n", sizeof(double*));
   puts("");

   return 0;
}

代码运行结果如下图所示:
在这里插入图片描述
运行结果分析:
运行结果显示 不同类型指针大小结果为4字节,而电脑是64位系统,地址应该是8字节才对啊,怎么回事呢?
这个和开发工具的配置有关,在VS2019下默认的解决方案平台是x86,是32位平台,所以指针大小最后显示为4字节,如下图所示,Debug显示为x86:
在这里插入图片描述
当把x86改为x64之后,指针大小打印结果如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值