c语言指针的类型转换,c语言指针的类型转换是什么

dfnjsfkhak 3 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言指针类型转换问题,于是小编就整理了2个相关介绍c语言指针的类型转换的解答,让我们一起看看吧。

  1. 指针类型强转求助?
  2. 如何向计算机小白解释C语言指针?

指针类型强转求助?

(CLogonDlg*) m_pWnd = m_Wnd;

C里可以这样写, 有些C++编译器也允许这样写。VC++报错。

c语言指针的类型转换,c语言指针的类型转换是什么-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

一般的指针类型强转是把等号右边的表达式强制转换为结果所需的类型(即等号左边变量的类型)。所以:

m_pWnd = (void *) m_Wnd;

m_Wnd = (CLogonDlg *) m_pWnd;

c语言指针的类型转换,c语言指针的类型转换是什么-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

在任何C/C++编译器都不会报措(当然CLogonDlg需要正确说明)。

由于m_pWnd类型是void *, 所以下面这样写也是正确的:

m_pWnd = w_Wnd;

c语言指针的类型转换,c语言指针的类型转换是什么-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

也就是说,任何指针变量类型无需强制类型转换即可直接赋值给void *类型.

但是反过来,void *类型需强制类型转换才可转换成其他指针变量类型:

如何向计算机小白解释C语言指针?

可以把指针看成门牌号,指针类型看成房间类型。

比如定义一个整数指针 int *p,此时没有初始化,所以指针p不知道指向哪个门牌号。此时再申请一个变量int a =0,说明我们申请到了一个房子,里面装的是整数0,可以用&a获得a的地址,也就是门牌号。这时可以给指针p赋值,p=&a,指针p就指向了a的门牌号,里面装的是int 类型的整数0,使用*p就可以获取指针指向的房间里面关着的值0。

其实指针p也有自己的房间门派号,所以可以定义一个二重指针,指向整数指针的指针int **pp = &p。也就是pp指向的是p的门牌号,使用*pp可以打开这间房间获取到里面的内容,发现存储的是一个指向a的指针,再使用**p就可以获得a房间装的值0。

C语言指针真的是C语言中的一个难点,难在哪里?倒不是因为它的概念难,而是讲清楚、讲明白指针概念的方式很难。英文中,指针的单词是pointer,把这个单词翻译成中文时都翻译的“指针”。“指针”这个词语别说在C语言中的使用了,就是在平时日常生活中我们对“指针”这个词语也不一定熟悉。所以有时候我在想,把pointer翻译成地址是不是会好一点,虽然地址的英文单词是address,但是最起码初学者看到“地址”这个词语要比看到“指针”这个词语好理解。

如何向小白解释C语言指针,那必须得用到一个比喻。有一个指针变量p和一个整型变量a,它们分别住在两个不同的房子里。指针变量p的房子叫指针房;整型变量a的房子叫整型房。平日里两者不相往来,互相之间也没有联系。

但是有一天变量a生病了要去医院挂号,但是上班不能请***,咋办?于是就想请变量p去帮忙代办,谁让变量p是个无业游民呢!那么此时变量p就代表变量a了。那么怎么把这两者“代表”起来呢?就靠星号*这个运算符了,也就是*+p的组合就可以代表a了,这个组合用文字书写出来就是*p。至于为什么要用*与p的组合才能代表a?不能直接用p来代表a吗?这个你就别管了,你死记硬背就行了。就像1+1为什么等于2你会去管吗?

我在“C语言编程技术分享”,这个公众号里有一些C语言的基础文章,供小伙伴们参考!

到此,以上就是小编对于c语言指针的类型转换的问题就介绍到这了,希望介绍关于c语言指针的类型转换的2点解答对大家有用

标签: 指针 类型 变量