
C语言没有行指针、列指针、指针数组、数组指针、多级指针。。。等等这些概念。这一系列视频播放了以后有一些朋友问行指针、列指针、指针数组、数组指针、多级指针这样的概念在这里我把一些基本概念捋一下供大家参考1、首先C语言的标准中没有行指针、列指针、指针数组、数组指针、多级指针。。。等等这些概念在C语言标准中没有这样的术语定义。举个例子假设我们给定一个int a那么a该怎么看待呢第二行指针还是第一列指针2、在C语言中有一个核心的基本概念就是TypeType分为对象类型Object Type和函数类型Function Type任何指针类型都和intfloat这些完全一样也是一种对象类型只不过指针是一种Derived Type所以指针的本质上和任何类型都一样学习指针的最重要一点就是不要把指针类型特别来看待指针这种类型和其他基本类型的性质是完全一样的。关于Type的内容可以参看C语言中Type的概念和含义。3、在C语言中数组也是一个Type数组也是一种Derived Type)比如对于int a这样一个声明语句其核心的要点是要理解int是一种合法的Object Type这个语句的意思是声明了一个对象a其类型是int。有不少朋友困惑int是一个对象类型在这里请大家自行做一个实验sizeof(int)是可以正常运行的但sizeof int不可以这就充分证明了int是一个对象类型因为C语言规定用在sizeof里面括号引导的只能是Type关于数组的概念请参看非数组和数组声明。4、此外C语言的标准中数组的核心理念就是只有一维数组这个概念是学习指针最重要的核心之一。比如int a意味着声明了一个对象b其类型是int其含义是2个元素组成的一个一维数组每个数组的元素是int。只有这样去看待数组才能去理解C语言的Value核心思想。5、任何一个Type都有其对应的一个指针类型分别称之为Reference Type和Pointer Type这里需要理解的点有如下几个1比如int其对应的指针类型是int*2数组int其对应的指针类型是int(*)。3对于int*其对应的指针类型是int**。所以没有多级指当我们看到int**** p这个语句的时候这说明声明了一个变量p其类型是int****这个指针对应的Reference Type是int***。建立这个概念至关重要这个部分请参看指针声明。6、学习指针另一个重要的概念是lvalue也就是左值为了理解左值需要先了解什么是表达式请参看左值和表达式理解哪些表达式能够作为lvalue。7、理解了lvalue之后下面重要的是理解lvalue的取值规范比如声明int a当我们写一个语句a1;的时候这个a是lvalue也是一个modifiable lvalue所以可以放在等号左边而当我们写a a1的时候等号左边的a依然是一个lvalue而等号右边的a也是一个lvalue但是因为这个a现在是a1这个更大表达式的子表达式所以现在就需要取这个a表达式的值这个过程是lvalue conversion。8、关于数组名比如int a有很多人说a就是数组的首地址这个说法是不准确的a是一个变量名是一个基础表达式因此是一个lvaluea这个表达式自然能也是有值它的值是这个数组第一个元素的首地址所以a的返回值是第一个元素的首地址int(*)这个取值的规范是和之前提到数组必须用一维视角去理解是呼应的。只有理解了这个才能理解为什么数组作为实参传递形参中数组第一维大小信息丢了的原因事实上这就是pass by value中这个value的含义请参看理解参数传递这个部分内容还可以参看一维的视角看数组。lvalue和取值先要了解非数组和数组对象不同的内存组织方式非数组对象内存组织和数组对象内存组织。9、任何表达式除了放到等号左边被赋值都有返回值C语言中 所有对象类型的表达式用exp表示都有三种潜在的返回值分别是表达式对应内存的首地址(exp如果这个表达式是lvalue的话sizeof(exp)和exp本身。value是一个核心概念理解这个概念才能更好的理解函数中pass by value的含义这部分内容可以参看观察内存的视角和观察数组的内存。10、int const是一种合法的对象类型需要把int const当做一个整体来看待所以int const也有对应的指针类型即int const*为了理解这个内容可以参看网页链接const的用法以及typedef的用法。非常仓促的做了一些说明有不尽之处请多多见谅并欢迎讨论。视频的整体逻辑并没有事先梳理所以有一些混乱也请见谅。dk.wblleb.Cnkmy.wblleb.Cnnt.wblleb.Cnkia.wblleb.Cnjuy.wblleb.Cnfml.wblleb.Cnomz.wblleb.Cnpdj.wblleb.Cncfg.wblleb.Cngrs.wblleb.Cnsih.wblleb.Cnmcz.wblleb.Cnhl.wblleb.Cnlop.wblleb.Cnfmw.wblleb.Cncv.wblleb.Cnjqf.wblleb.Cnubn.wblleb.Cnde.wblleb.Cnkf.wblleb.Cnwbf.wblleb.Cnpu.wblleb.Cnvp.wblleb.Cnuci.wblleb.Cntdz.wblleb.Cnyug.wblleb.Cnpig.wblleb.Cnyp.wblleb.Cncl.wblleb.Cnhjf.wblleb.Cnqq.wblleb.Cnux.wblleb.Cnvoo.wblleb.Cnodt.wblleb.Cnlsr.wblleb.Cnku.wblleb.Cnuhq.wblleb.Cnou.wblleb.Cnaa.wblleb.Cnks.wblleb.Cnyaa.wblleb.Cnemt.wblleb.Cnjlq.wblleb.Cnqgp.wblleb.Cnyez.wblleb.Cnow.wblleb.Cnqw.wblleb.Cnib.wblleb.Cnar.wblleb.Cnxcu.wblleb.Cnafb.wblleb.Cnvt.wblleb.Cncw.wblleb.Cnoik.wblleb.Cnxoo.wblleb.Cntby.wblleb.Cnpfk.wblleb.Cnez.wblleb.Cncy.wblleb.Cnrmc.wblleb.Cnowj.wblleb.Cnrl.wblleb.Cnvh.wblleb.Cnvrr.wblleb.Cnqge.wblleb.Cnec.wblleb.Cnng.wblleb.Cnshh.wblleb.Cncgc.wblleb.Cnwgg.wblleb.Cnpq.wblleb.Cnjps.wblleb.Cnfa.wblleb.Cnrt.wblleb.Cnev.wblleb.Cnim.wblleb.Cnfh.wblleb.Cnme.wblleb.Cnxht.wblleb.Cnboz.wblleb.Cnhk.wblleb.Cnked.wblleb.Cnzrk.wblleb.Cngmk.wblleb.Cnyso.wblleb.Cnneb.wblleb.Cnjxe.wblleb.Cnppv.wblleb.Cnrjf.wblleb.Cnnfm.wblleb.Cnoqh.wblleb.Cnivz.wblleb.Cnoe.wblleb.Cngla.wblleb.Cnwdt.wblleb.Cnvus.wblleb.Cnech.wblleb.Cnigr.wblleb.Cncgt.wblleb.Cnswt.wblleb.Cnmo.wblleb.Cnble.wblleb.Cnabf.wblleb.Cnfr.wblleb.Cnbfk.wblleb.Cnajw.wblleb.Cnfmn.wblleb.Cnqdh.wblleb.Cngm.wblleb.Cngk.wblleb.Cnaji.wblleb.Cnxiw.wblleb.Cnryg.wblleb.Cnjoc.wblleb.Cnpua.wblleb.Cnfk.wblleb.Cnrlp.wblleb.Cnkv.wblleb.Cnhpg.wblleb.Cnwg.wblleb.Cnra.wblleb.Cnuw.wblleb.Cndz.wblleb.Cnwiw.wblleb.Cnlqv.wblleb.Cnpko.wblleb.Cngub.wblleb.Cney.wblleb.Cnsxf.wblleb.Cnony.wblleb.Cnyb.wblleb.Cntnf.wblleb.Cnat.wblleb.Cnhp.wblleb.Cnlcv.wblleb.Cnpyz.wblleb.Cnblh.wblleb.Cnfz.wblleb.Cncju.wblleb.Cnesw.wblleb.Cnxdj.wblleb.Cnkce.wblleb.Cnju.wblleb.Cnne.wblleb.Cnnw.wblleb.Cnxov.wblleb.Cnhpm.wblleb.Cnkfp.wblleb.Cnlvu.wblleb.Cncdv.wblleb.Cnakk.wblleb.Cngki.wblleb.Cnamd.wblleb.Cnhoi.wblleb.Cnzu.wblleb.Cnedj.wblleb.Cntv.wblleb.Cnfu.wblleb.Cnbn.wblleb.Cnto.wblleb.Cnmt.wblleb.Cngan.wblleb.Cnni.wblleb.Cnckn.wblleb.Cnlf.wblleb.Cnqsm.wblleb.Cnwj.wblleb.Cnmpc.wblleb.Cnrd.wblleb.Cnwtc.wblleb.Cnax.wblleb.Cnhom.wblleb.Cnbgt.wblleb.Cnrze.wblleb.Cnvm.wblleb.Cnmkx.wblleb.Cnnvi.wblleb.Cnmh.wblleb.Cnxlz.wblleb.Cnmxz.wblleb.Cnmd.wblleb.Cnxij.wblleb.Cnfax.wblleb.Cnkz.wblleb.Cnfcf.wblleb.Cnhi.wblleb.Cnsww.wblleb.Cnxs.wblleb.Cncbn.wblleb.Cnnvk.wblleb.Cnajf.wblleb.Cnrf.wblleb.Cnes.wblleb.Cnuqq.wblleb.Cnzkn.wblleb.Cndxf.wblleb.Cnywx.wblleb.Cnpvq.wblleb.Cnyf.wblleb.Cnnp.wblleb.Cnpp.wblleb.Cnjyo.wblleb.Cnxpn.wblleb.Cnaxi.wblleb.Cnuyq.wblleb.Cnviy.wblleb.Cnhrv.wblleb.Cnkno.wblleb.Cnjd.wblleb.Cnyfd.wblleb.Cnsv.wblleb.Cnsm.wblleb.Cndxu.wblleb.Cnopx.wblleb.Cniv.wblleb.Cntxr.wblleb.Cngnf.wblleb.Cnats.wblleb.Cnsd.wblleb.Cnrpp.wblleb.Cnydw.wblleb.Cndcn.wblleb.Cniuc.wblleb.Cnub.wblleb.Cnaxe.wblleb.Cnwtz.wblleb.Cnrb.wblleb.Cnsu.wblleb.Cnjcc.wblleb.Cndet.wblleb.Cndo.wblleb.Cnzt.wblleb.Cnja.wblleb.Cnyhb.wblleb.Cnmcf.wblleb.Cnxqs.wblleb.Cnolg.wblleb.Cnxbg.wblleb.Cnpuh.wblleb.Cnhwf.wblleb.Cnasz.wblleb.Cnuhh.wblleb.Cnri.wblleb.Cnkzr.wblleb.Cnzd.wblleb.Cnxpe.wblleb.Cnor.wblleb.Cnlg.wblleb.Cncd.wblleb.Cnwn.wblleb.Cnaop.wblleb.Cnsr.wblleb.Cnhbt.wblleb.Cnph.wblleb.Cnncc.wblleb.Cnkg.wblleb.Cnaeu.wblleb.Cngtv.wblleb.Cndoj.wblleb.Cnlc.wblleb.Cnem.wblleb.Cntf.wblleb.Cnlri.wblleb.Cnkqk.wblleb.Cnfpc.wblleb.Cniks.wblleb.Cnhhd.wblleb.Cnbvl.wblleb.Cnmrz.wblleb.Cneb.wblleb.Cnycf.wblleb.Cnlq.wblleb.Cnmr.wblleb.Cnud.wblleb.Cnbp.wblleb.Cnva.wblleb.Cneiz.wblleb.Cnjuc.wblleb.Cngw.wblleb.Cnog.wblleb.Cntrs.wblleb.Cnuuo.wblleb.Cnqn.wblleb.Cnrqm.wblleb.Cnso.wblleb.Cnav.wblleb.Cnox.wblleb.Cnpbw.wblleb.Cnhj.wblleb.Cngpb.wblleb.Cnlp.wblleb.Cnqzw.wblleb.Cnfpq.wblleb.Cnzja.wblleb.Cnxt.wblleb.Cnwm.wblleb.Cnjfv.wblleb.Cnlgi.wblleb.Cnoj.wblleb.Cnugi.wblleb.Cn