*.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:#99ccff;}*.hl_mark_KMSmartTagYellowImg{background-color:#ffff66;}*.hl_mark_KMSmartTagOrangeImg{background-color:#ffad5b;}*.hl_mark_KMSmartTagGreenImg{background-color:#84e384;}*.hl_mark_KMSmartTagPurpleImg{background-color:#d6acff;}*.hl_mark_KMSmartTagRedImg{background-color:#ff8888;}
.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -7%;-webkit-user-select: none;} .wiz-todo-label { line-height: 2.5;} .wiz-todo-label-checked { color: #666;} .wiz-todo-label-unchecked {text-decoration: initial;} .wiz-todo-completed-info {padding-left: 44px; display: inline-block; } .wiz-todo-avatar { width:20px; height: 20px; vertical-align: -20%; margin-right:10px; border-radius: 2px;} .wiz-todo-account, .wiz-todo-dt { color: #666; }
数组指针:
首先看名字“数组指针”是“指针”,那就可以当作指针理解啰。但是前面有数组,也就是它指向的是数组。
看-》 int (*p)[10], 我们从表达式分析,因为()的优先级高,于是*p代表p是指针,又int 修饰的是[10]表示
一个含有10个int型的数组,于是p代表的是含有10个元素的数组的首地址。
也许该这么定义数组指针:
int (*)[10] p
因为依我们的手法,肯定前面是类型,后面是变量嘛,于是前面定义的类型是一个数组指针,
后面是该指针的名字。但是编译器可不这么想啦,因为这样写太丑。于是就写成了
int (*p)[10]
指针数组:
指针数组,故名思义指针数组就是“数组”,于是呢,但是数组里面的内容是指针,于是呢我们
int *p[10]
这里可以这样理解,由于[]的优先级比*更高,于是首先这个p 与[]结合成一个数组,于是数组名
是p,后面的int *则修饰里面的内容,得到是一个含有10个int*的数组。
指针的指针
指针的指针就是指针里面存储的内容还是一个指针地址。
数组指针 指针数组 指针指针在形参与实参上的关系
“数组名被改写成一个指针参数”规则并不是递归定义的。数组的数组会被改写成“数组的指针”,而不是“指针的指针”:
实参 所匹配的形参
数组的数组 char c[8][10]; char (*)[10]; 数组指针
指针数组 char *c[10]; char **c; 指针的指针
数组指针(行指针) char (*c)[10]; char (*c)[10]; 不改变
指针的指针 char **c; char **c; 不改变
来源: <http://www.wutianqi.com/?p=1822>