指针类型与指针指向类型理解
今天在看一些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型
好了,现在看上面的题目应该知道怎么做了。
指针类型与指针指向类型理解相关推荐
- 关于空指针(指针指向为NULL)和void类型的指针的理解
正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1) ...
- 指针类型和指针类型转换的理解
前几天在判断 "值相同的两个指针所指向的变量的值可以不同 " 这句话时,发现自己对指针类型一些概念仅仅是记住了结论.于是查阅了一些资料,记录一下一些与指针类型和指针类型转化相关 ...
- 指向指针数组的指针和指针数组类型的指针
目录 基本操作 指向指针数组的指针 指针数组类型的指针 基本操作 通常我们通过以下方式进行指针变量的定义: /* a pointer to unsigned char */ unsigned char ...
- 指向结构体类型的指针
结构体变量的指针就是该变量所占据的内存段的起始地址.可以定义一个指针变量来指向一个结构体变量,也可以动态分配内存存放结构体各成员数据. 与指向普通数据类型的指针变量相同,也可以定义指向结构体数据类型的 ...
- 指针的类型和指针所指向的类型
从语法角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型,这是指针本身所具有的类型. int *ptr; int* char *ptr; char* int **ptr ...
- LPVOID是一个没有类型的指针
LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候再转换回来. 可以将其理解为long型的指针,指向void型. 2示例 ...
- 【二级指针--定义、初始化赋值、解引用;特殊指针--空指针、void类型的指针】(学习笔记12--指针下)
目录 一.二级指针 指针的指针 二级指针的定义 二级指针的初始化与赋值 二级指针的解引用 二级指针与指针数组 main函数的参数 二.特殊指针 空指针 void类型的指针 新星计划第六篇博文,下面是上 ...
- 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针
文章目录 指针是什么? 指针的定义 指针的大小 指针类型 指针有哪些类型? 指针类型有什么意义? 野指针 野指针的成因 如何避免野指针 指针运算 指针+-整数 指针-指针 指针的关系运算 二级指针 指 ...
- c语言定义node类型指针,C语言指针的概念
在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...
最新文章
- R语言ggplot2可视化分面图(faceting)、编写自定义函数将生成的分面图分裂成多个子图、并按照索引读取对应的可视化图像:Split facet plot into list of plots
- Mean Shift+聚类
- 用低代码平台开发比用IDEA还牛逼吗?
- C#代码创建Xml文件
- Halcon图像滤波方法与原理概述
- C 语言结构体成员赋值的深拷贝和浅拷贝
- Unity飞机大战源码下载
- 传统车载网络,软件定义汽车
- 计算机技术在材料成型工业中的应用,计算机在材料成型应用摘要.ppt
- 腾讯网上共享excel使用总结
- 不服就GAN:GAN网络生成 cifar10 的图片实例(keras 详细实现步骤),GAN 的训练的各种技巧总结,GAN的注意事项和大坑汇总
- leJOS EV3 Eclipse Mac 总结
- 在Python中如何判断一个对象的类型?
- Android textview设置ttf字体库本地库和网络库使用的两种方式
- 2020七月实训GUI学生信息管理系统
- 零拷贝之splice( )函数和tee( )函数
- 防火墙iptables原理及简单应用
- 奇趣网站收藏家(网站)
- 【数学基础】最简分数
- ubuntu armv7l安装docker-comose