前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针学习(详解)

指针学习(详解)

作者头像
诺谦
发布2018-01-03 16:18:46
5410
发布2018-01-03 16:18:46
举报
文章被收录于专栏:Linux驱动Linux驱动

在指针中*是取内容,&是取地址

(在结构体中时:变量结构体用".",指针结构体用"->")

通常有两种的表示:

1. 通过指针向指向的地址内容赋值

代码语言:javascript
复制
*p=a; //将p指向的地址里赋a值

注意:若a和p定义的变量类型不一样时,需要用到强制转换才行.

当指针指向的地址内容是一个变量时,

实例如下:

代码语言:javascript
复制
int main()
{
int   *p=0x12345678;                     //定义一个int型指针*p,p=0x12345678这个地址。
char    a='0';                   //定义一个char型变量b
*p=(int)a;                 //*p等于a(0x12345678这个地址的内容等于a变量的值)          
}

当指针指向的地址内容是另一个指针指向的地址内容时,

实例如下:

代码语言:javascript
复制
int main()
{
int   *p=0x12345678;             //定义一个int型指针*p,p=0x12345678这个地址。
char    b='0';                   //定义一个char型变量b
char *a=&b;                //定义一个char型指针*a,a=&b,表示a指针的地址等于b的地址。
*p=*(int *)a;          //首先是先执行(int *)强制转换为int型指针,然后*p等于*a(0x12345678地址的内容等于'0'这个变量)          

}

2. 指针指向其它的地址

代码语言:javascript
复制
p=&a; //将p的地址 指向a的地址

   它和"int a=0,*p=&a;"一个意思,这里的*只是代表定义一个指针(不是指向地址的内容),然后指针p=&a;

实例如下:

代码语言:javascript
复制
int main()
{
int a=0,*p; //定义一个int型指针p,p等于0x12345678这个地址。
p=&a; //p等于a的地址,则*p=0
}

3.指针地址与数值相加

   指针地址与数值相加和数值与数值相加不一样,

char型指针:0X3000+1=0X3001           (因为1个地址保存8位数据,而char是8位.)

short型指针:0X3000+1=0X3002          (16位)

int、long型指针:0X3000+1=0X3004    (32位)

long long型指针:0X3000+1=0X3008   (64位)

变量与变量相加,实例如下:

代码语言:javascript
复制
#include "stdio.h"

 #define tag_next(t)    ((int *)((unsigned long)(t) + 1))   
int main()
{
    int i=3,*t=&i;
    printf("  %x,%d\n", t,*t);    
    t=tag_next(t);         //t=  *(t+1)
    printf("  %x,%d\n", t,*t);    
}

这里的tag_next(t): 将t地址强制转换为u32变量,与另一个变量1相加

代码输出如下:

 也就是t=0X28ff18+1=0x28ff19

int型指针地址与变量相加,实例如下:

代码语言:javascript
复制
#include "stdio.h"

 #define tag_next(t)    ((int *)((unsigned int*)(t) + 1))
int main()
{
    int i=3,*t=&i;
    printf("  %x,%d\n", t,*t);
    t=tag_next(t);               //t=*((unsigned long *)t +1)
    printf("  %x,%d\n", t,*t);    
}

这里的tag_next(t): 将t地址强制转换为u32*指针,然后这个指针地址与另一个变量1相加

代码输出如下:

也就是t=0X28ff18+1=0x28ff18+4=0x28ff1c

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档