day7--

scanf遇到空格不能识别空格,遇到空格会中止

地址:每一块内存单元(1byte)的编号

如何取地址:取地址符 &变量名

打印地址:%p

通过解引用操作符(*),可以获取地址中存放的值

1.例析
#include<stdio.h>
int main()
{
    int a = 20;
    int* p = &a;
    *p = 10;
    printf("%p\n", p);
    printf("%p\n", &a);
    printf("%d\n", *p);
    printf("%d\n", a);
    return 0;
}
输出结果:

 分析:

        int* p:p是指针变量,定义指针变量需要在相关的数据类型后面加上*,此处的*并非是解引用操作符,仅仅是一种格式,并无实际意义,int则是指针变量p所指对象的数据类型,因为前面定义的a是int类型,所以该处是int*(整型),在其他场景下可以是double*(双精度型)、char*(字符类型)、float*(单精度型),按照具体情况而定
        &a:&为取地址操作符,&a则是取出a的地址
int* p=&a;:这一步是取出a的地址(对应&a),并赋给指针变量p,如果此时打印指针变量p那么输出的结果就是a的地址(即第7、8行代码,输出结果第1、2行),如果要打印a的地址要么printf("%p\n", p);要么printf("%p\n", &a);但要注意一个有&一个没有&,p前面没有&是因为指针变量p指代的就是&a
*p=10;:此处的*是解引用操作符,目的是间接访问p的地址即a,并将a的大小改成10,再强调一下此处的*与int*中的“*”的意义不同,前者是解引用操作符,后者是一种语法形式,无实际意义

对地址解引用可以取到地址里面的值

*&scores<===>*0x7ffd726fe864<===>25.6

保存地址,使用赋值语句(数据类型 变量名=表达式)

保存地址的类型:指针类型

p是指针变量——(指针)

一个指针变量在内存中占有八个字节

在64位操作系统下,所有的指针类型的变量在内存中占有8个字节

在32位操作系统下,所有的指针类型的变量在内存中占有4个字节

                              如何查看变量的类型:将变量名去掉,剩下的就是他的类型

通过pp来获取score的值

*pp<==>*&p<==>p

指针:就是指针变量

指针变量:保存地址的变量

指针类型:也是一种数据类型,指针变量的类型

数组和指针:

int arr[60]={1,2,3,4,5,6};//声明并初始化了一个数组变量

//变量名:arr

//类型:int [6],占24个字节

&arr取得是数组变量的首地址

表示的含义不一样,&arr是整个数组的首地址,arr是数组中首元素的地址

指针是可以进行+-一个整数,称之为指针的偏移,+-的整数就是偏移量

每次+-的step是偏移step个元素

&arr[1]<====>arr+1 都代表数组中第二个元素的地址

&arr+1代表第二个元素的地址

二维数组:

任何指针变量开辟的空间大小都是8byte(64位操作系统)

数组指针:数组的指针

int arr[6]={1,2,3,4,5,6,}

int (*p)[6]=&arr

p的类型int(*)[6]
指针数组:指针的数组

int* p[6]=&arr

一维数组等价关系:

等价关系

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值