学习嵌入式day06

指针

一级指针存放普通变量的地址

格式:

存储类型    数据类型      * 指针变量名

                         int            *p;

定义指针

只有在定义指针时,* 表示定义指针的标志,其他情况下 * 表示取内容 

例:

int a=10;

int *p=&a;   // p 内储存变量 a 的地址

定义指针时,一定要对它初始化,否则就会产生野指针

1)int *p;            //  p为野指针,没有初始化,是个随机的地址;

2)int *p=NULL; // 指针初始化,可以赋值为NULL(空地址);后边可以再对p重新赋值

      int b=9;

      p=&b;

 操作符

*  :取内容符  取指针指向的地址内的内容

& :取地址符  取变量的地址

int a=10;

int *p=&a;

printf("%d\n",*p);   //输出10

=====================

地址:   &a   ==   p

内容:     a   ==   *p

 初始化

1.存放普通变量的地址  
1.int *p=&a;         定义的同时赋值;
2.int *p=NULL; 
         p=&a;         先定义p为空指针,再赋值;  
2.存放数组的首地址
int arr[5]={5,6,7,8,9};
    int *q=arr;             // q内存的是数组首地址
===============================
char s[33]="hello";	        //s:数组首地址
    char *p=s;		        // 数组首地址赋值
    printf("%p %p\n",s,p);  // s,p都是数组首地址
    printf("%s\n",p);	 	//"hello",p内存的数组首地址,打印字符串
    printf("%c\n",*p);		//'h',p内存的数组首地址,打印第一个字符
3.存放另一个指针变量的地址

int a=6;

int *p=&a;

int *q=p; //int *q=&a;

修改其中任意一个另外几个同步修改

运算符

算数运算

p++:向高地址方向移动一个数据单位(int:4 char:1);指针的指向发生改变

char c[6]={"hello"};
    char *p=c;
    p++;            //p++后,向高地址方向移动1个数据单位(char);
======================
int a[5]={5,6,7,8,9};
    int *q=a;
    q++;            //++后,向高地址方向移动1个数据单位(int);

p+n:向高地址方向(暂时)移动n个数据单位(int:4 char:1);指针的指向不改变

char c[6]={"hello"};
    char *p=c;
    p++;     //p++后,向高地址方向移动 n 个数据单位(char);即为数组下一元素的地址;
======================
int a[5]={5,6,7,8,9};
    int *q=a;
    q++;     //++后,向高地址方向移动 n 个数据单位(int);即为数组下一元素的地址

同一个数组中:两个地址的差值==相差元素个数

int a[5]={5,6,7,8,9};

int *p=a;

int *q=&a[2];

printf("%d\n",q-p); //2

关系运算 

<    >    ==

比较的是地址的高低(同一个数组中比较)

指针大小

    int a[5]={5,6,7,8,9};
    int *p=a;
    printf("%ld\n",sizeof(p));  //8
    
    int b=6;
    int *p1=&b;
    printf("%ld\n",sizeof(p1)); //8

    char c='q';
    char *p2=&c;
    printf("%ld\n",sizeof(p2)); //8

    float d=2.3;
    float *p3=&d;
    printf("%ld\n",sizeof(p3)); //8

64操作系统指针大小8字节

32操作系统指针大小4字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值