今天在看一些C语言面试题时,遇到这样一个题目:

#include<studio.h>int main(){unsigned int a = 0xFFFFFFF7;unsigned char i = (unsigned char)a;char *b = (char *)&a;printf("%08x,%08x",i,*b);
}

我先说一下答案,0x000000F7 ,0xFFFFFFF7

关于指针,我经常听到或看到这两种说法,“指针类型与指针指向类型”,那这两种说法到底有什么关系呢?

首先,我们随便定义一个指针:

int *a;

那么,这里的int是什么含义呢?
我的解释:假设我们在32位的机器上,首先要知道的一点,不管怎样,无论是int *a,还是char *a;这里的a的值都是4字节,32位的。我认为指针类型与指针指向类型就是一个意思,这里都是表示: a这个变量的值,是一个int型变量的地址,因此,我们在给a赋值的时候只能将一个int型变量的地址值,赋值给它,即:

int b = 10;
int *a;
a=&b;

如果这样写:

char b = 'b';
int *a;
a=&b;

编译肯定会报错的。
此时如果,一定要这样写,就需要强制类型转换。

char b = 'b';
int *a;
(char *)a=&b;

那么转换之后,跟上面那道题目就几乎一样了,那么现在跟原来有什么区别呢?
其实转换之后,a本身的值还是4个字节的,但是此时他存储的是一个char型的变量的地址,所以可以说它指向一个char类型,或者此时指针类型是char。就是因为他还是4个字节,a本身没有变化,所以*a的值还是不变的。改成这样后的唯一变化就是:
a+1

之前a+1:  是地址的值+4,因为它指向的是int型
现在a+1:  是地址的值+1,因为它指向的是char型

好了,现在看上面的题目应该知道怎么做了。

指针类型与指针指向类型理解相关推荐

  1. 关于空指针(指针指向为NULL)和void类型的指针的理解

    正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1) ...

  2. 指针类型和指针类型转换的理解

    前几天在判断  "值相同的两个指针所指向的变量的值可以不同 "  这句话时,发现自己对指针类型一些概念仅仅是记住了结论.于是查阅了一些资料,记录一下一些与指针类型和指针类型转化相关 ...

  3. 指向指针数组的指针和指针数组类型的指针

    目录 基本操作 指向指针数组的指针 指针数组类型的指针 基本操作 通常我们通过以下方式进行指针变量的定义: /* a pointer to unsigned char */ unsigned char ...

  4. 指向结构体类型的指针

    结构体变量的指针就是该变量所占据的内存段的起始地址.可以定义一个指针变量来指向一个结构体变量,也可以动态分配内存存放结构体各成员数据. 与指向普通数据类型的指针变量相同,也可以定义指向结构体数据类型的 ...

  5. 指针的类型和指针所指向的类型

    从语法角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型,这是指针本身所具有的类型. int *ptr;    int* char *ptr;   char* int **ptr ...

  6. LPVOID是一个没有类型的指针

    LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候再转换回来. 可以将其理解为long型的指针,指向void型. 2示例 ...

  7. 【二级指针--定义、初始化赋值、解引用;特殊指针--空指针、void类型的指针】(学习笔记12--指针下)

    目录 一.二级指针 指针的指针 二级指针的定义 二级指针的初始化与赋值 二级指针的解引用 二级指针与指针数组 main函数的参数 二.特殊指针 空指针 void类型的指针 新星计划第六篇博文,下面是上 ...

  8. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

    文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...

  9. c语言定义node类型指针,C语言指针的概念

    在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...

最新文章

  1. 【游戏开发】Excel表格批量转换成CSV的小工具
  2. A CAPTCHA Server Control for ASP.NET C# 版
  3. ASP.NET的自定义分页
  4. 如何将response里header的date转化为当地时间_将产品20元利润提升到2000元,靠的是卖体验!...
  5. SQL中的CASE WHEN THEN使用
  6. 使用VC2005一些问题及解决方案(一)
  7. AForge.NET 入门
  8. 三菱伺服电机马达使用注意事项
  9. oracle将两个时间相减_oracle 两个时间相减
  10. 计算机应用选购哪些电脑,购买电脑有哪些要注意的
  11. Python内存优化,节省内存字典ConstDict
  12. 不错的源码演示:admin5源码
  13. win10 计算机重启,win10电脑自动重启
  14. 如何用机器学习算法计算特征重要性
  15. 【matlab图像处理】插值方法
  16. android usb挂载分析---MountService启动
  17. php 截取逗号前字符串,php如何截取逗号之前的字符
  18. PHP三网码支付系统源码PC软件带云端源码/含三套前端模板免签支付系统安装教程
  19. English-人事部翻译资格认证
  20. 【String-easy】657. Robot Return to Origin 机器人能否回到原点

热门文章

  1. 前后端分离简单项目--蚂蚁博客--简介
  2. Java的逻辑运算符
  3. 5G NR - 下行同步(DL Synchronization)学习笔记5 - SSB是否始终位于BWP之内?
  4. Tomcat和Jenkins
  5. 学生个人网页Dreamweaver设计作业 环保垃圾分类5页表格 js时间特效 js轮播视频 (1)
  6. Highcharts API
  7. php点击文字弹出js提示框,js弹出框、对话框、提示框、弹窗实现方法总结(推荐)...
  8. 基于Java的题库管理系统的设计与实现
  9. 团队项目心得 [ 感想 ]
  10. 浏览器可以运行 Python 代码了?