首页 > 代码库 > 关于typedef的用法总结
关于typedef的用法总结
http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html
#include<stdio.h>#include <string.h>// AP是指向长度为5的char数组的指针(数组指针),可简单讲是属于二级指针typedef char (*AP)[5];AP defy(char *p){ int i; for(i=0;i<3;i++) p[strlen(p)]=‘A‘; return (AP)p+1;}int main(){ // char a[][5] char a[]="FROG\0SEAL\0LION\0LAMB"; puts(defy(a)[1]+2); return 0;}// output: ONALAMB
AP是指向长度为5的数组的指针,可简单讲是属于二级指针,return (AP)p+1是语法上看起来别扭的用法,p不是二级指针,但含义被强制转成了每5个字符一组的二级数组,并且返回第二个子组,也就是说p与a一样,指向数组中最前面的‘F‘,但返回值是指向以第5个字符‘S‘开头的子组的指针,也还是二级指针(而且函数defy还把p数组的3个‘\0‘都改成了’A‘,也就是把所有子组全都用‘A‘连在一起了),puts(defy(a)[1]+2)在返回值defy(a)的基础上defy(a)[1]又是取第二个子组,即指向的是字符‘L‘开头的子组,但这回是踏踏实实的了,得到的是char[5]这样的普通含义的字符串指针,简单说defy(a)[1]就指向‘L‘了,后面再+2是跳过2个字符,改指向‘O‘了,puts输出从‘O‘开始的字符串,注意因为defy做的改写,“O”和后面的“LAMP”被’A‘连在一起了。 整个很别扭的根本原因是char a[] = 这里,干脆把它改成char a[][5] = 那么是不是对LZ理解有帮助呢
关于typedef的用法总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。