今天在看一些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. R语言ggplot2可视化分面图(faceting)、编写自定义函数将生成的分面图分裂成多个子图、并按照索引读取对应的可视化图像:Split facet plot into list of plots
  2. Mean Shift+聚类
  3. 用低代码平台开发比用IDEA还牛逼吗?
  4. C#代码创建Xml文件
  5. Halcon图像滤波方法与原理概述
  6. C 语言结构体成员赋值的深拷贝和浅拷贝
  7. Unity飞机大战源码下载
  8. 传统车载网络,软件定义汽车
  9. 计算机技术在材料成型工业中的应用,计算机在材料成型应用摘要.ppt
  10. 腾讯网上共享excel使用总结
  11. 不服就GAN:GAN网络生成 cifar10 的图片实例(keras 详细实现步骤),GAN 的训练的各种技巧总结,GAN的注意事项和大坑汇总
  12. leJOS EV3 Eclipse Mac 总结
  13. 在Python中如何判断一个对象的类型?
  14. Android textview设置ttf字体库本地库和网络库使用的两种方式
  15. 2020七月实训GUI学生信息管理系统
  16. 零拷贝之splice( )函数和tee( )函数
  17. 防火墙iptables原理及简单应用
  18. 奇趣网站收藏家(网站)
  19. 【数学基础】最简分数
  20. ubuntu armv7l安装docker-comose

热门文章

  1. Windows Server 2016 Nginx 安装配置详细图文教程
  2. 流量红利消减,酷开系统技术驱动突出重围
  3. GreenPlum数据库及语法使用
  4. [5G][NR] BWP (Bandwidth Part)
  5. 【qscoj】伊苏比的梦幻之旅之魔方(枚举+公式+高精度)
  6. v-SLAM技术简述
  7. SQL SERVER学习(五)——CentOS7下安装SQL SERVER
  8. ansible-点对点模式
  9. setState 说明
  10. JS实现图片压缩,兼容ios,