问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何定义一个指向数组的指针

发布网友 发布时间:2022-04-29 09:51

我来回答

3个回答

热心网友 时间:2022-06-25 18:37

指针数组是一种特殊的数组,指针数组的数组元素都是指针变量。指针数组的定义格式为:
类型名称
*数组名称[数组长度];
例如:float
*pf[3];
因为下标运算符[]的优先级高于指针运算符*,上述定义等价于:float
*
(pf[3]);
说明pf是一个含有3个元素的数组,数组元素为指向float型变量的指针变量。
又如:
int
*pn[5];
/*定义一个5个元素的指针数组,数组元素为指向int型变量的指针变量*/
char
*pc[10];
/*定义一个10个元素的指针数组,元素为指向char型变量的指针变量*/
不论指针数组是什么类型,指针数组的每个数组元素都用来保存一个地址值,在TurboC下,每个数组元素是一个unsigned
int型变量,占用2个字节。
指针数组定义后,可以使数组元素指向一个变量和其他数组的首地址。下面是一个指针数组定义和引用的例子。
main()
{
int
i;
char
c1[]="How";
char
c2[]="are";
char
*c3="you";
char
*pArray[3];
pArray[0]=c1;
pArray[1]=c2;
pArray[2]=c3;
for(i=0;i<3;i++)
printf("%s
",
pArray[i]);
}
程序运行的结果为:
How
are
you
说明:
(1)程序中c1,c2被定义为字符数组并初始化;c3是一个指针变量,指向字符串所在字符数组的首地址。
(2)语句char
*pArray[3];定义了三个元素的指针数组pArray,数组元素是指向char型变量或数组的指针变量。
(3)语句pArray[0]=c1;将字符数组c1的首地址赋给pArray[0],指针变量pArray[0]指向了c1的首地址。
(4)for循环中,语句printf("%s
",
pArray[i]);依次打印了三个字符数组的内容。比如,pArray[0]里存放了c1的首地址,printf("%s
",
pArray[0])和printf("%s
",
c1)的作用是相同的。
字符数组c1,c2,c3和指针数组pArray的内存情况如下图(图中的数组首地址值是假设的值)。
指针数组pArray占用了从FFC0开始的6个字节。char型变量占用1个字节,因此字符数组c1,c2,c3均占用4个字节(包括字符串结束符'\0')。pArray[0]里存放了字符数组c1的首地址FF10,使pArray[0]指向c1。pArray[1]里存放了字符数组c2的首地址FF50,使pArray[1]指向c2。pArray[2]里存放了字符数组c3的首地址FF70,使pArray[2]指向c3。

热心网友 时间:2022-06-25 18:37

这个用typedef可以完成:
先定义一个函数指针的类型:typedef
void
(*pfun)();
然后用这个类型pfun定义一个数组
pfun
ptr[5];//[]里的数字是数组元素的个数,依情况而定:这儿用5做例子
这样ptr就是一个指向函数指针的数组。
对于“把一个指针强制定义”这我还没听过这个说法,只听过把指针强制转换成某个类型的指针:
强制类型转换用()运算,仍然用上面的定义类型。
例如:
void
*p;//p是一个void指针
pfun
ptr;//ptr是一个指向void函数的指针
ptr=(pfun)p;//把p强制转换成指向void函数的指针,然后就可以把它赋值给ptr指针。
不用typedef也可以,只要合并就可以了:
void
(*ptr[5])();//这样ptr就是一个函数指针数组了.这样看很费解的!不如用typedef。
对于强制类型转换最好还是用typedef,那样可读性好。
而且个人认为指针没有那种基本类型(指向函数的指针类型),那是一种新的类型。所以要先定义那种类型才行。
用typedef定义新类型又没有什么副作用,而且容易读懂,何必非要不用typedef呢?!没必要把简单的问题复杂化!!
程序代码的可读性是很重要的,写复杂的类型而不用typedef是很令人反感的!

热心网友 时间:2022-06-25 18:38

有2种模式:一种是自身的数组变量就是一个指针(这样说不太准确)
另一种就是传说的定义模式:
int
*a=NULL;
int
arr[20];
a=arr;
本身arr就是一个指针,如果你学了汇编对这些指针类问题解决起来就太简单的!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
荣耀v20杀后台严重? 聊天时哪些回复让人感觉不舒服? 货物运输保险案例分析 卞和泣玉注释 求解,卞和泣玉没学过,在线等解。 葛加走之底读什么 在等腰三角形ABC中,AB=AC=5,BC=6,求角B的三角函数值 ...人开走一架战斗机,在一架客机下面飞,好几个飞机来拦截, ...话是三架飞机 机型各不同 在山区飞行发现恐怖分子用驴车运核弹 用AK... ...的成为战斗机飞行员。战争结束回国继续抢银 求此套小猫和小鸡的表情叫什么名字 有图例 有套图的追高分! 151412514@qq.com 谁能详细描述一下老挝的互联网状况是怎么样的? 姓名:叫什么名字好 如何定义一个指向函数的指针数组 函数指针如何定义? 求ponponpon这首歌出处 麻烦各位大师给女而起个名字. 饰演法国电影《蝴蝶》的小女孩是谁? 帮我看下走的苹果是真的不型号MD128ZP&#92;A序列号是DX7KGQDVDPON 想要一些好听的古代女生名字,带一些诗情画意的,最好有一些含义,特别一点的,拜托了各位~~! 哪个亲有东方神起参加xman的所有视频资源,如果的有的话请发给我fushirueshui@126.com 现在有什么PSP游戏好玩点的,最好是适合女孩子的? ね~PON?×らいPON!哪里下载 PMP考试多少题,是中文考试吗?多少分算合格呀? html中 &lt;header&gt;&lt;h&gt;区别是什么 啪嗒砰 沙漠下雨就一会,怎么就能三下就FEVER http:&#47;&#47;www.tudou.com&#47;programs&#47;view&#47;enGRE94wVMc&#47;?fr=rec2 11首歌的歌名 当当网上购书,如何积分,如何使用积分 索尔思光电是做什么的公司 啪嗒砰求雨步子中xxpataxxxx怎么总求不出来雨 c++中函数指针数组 怎么定义 数组指针和指针数组怎样理解,当他们作为函数参数时,怎样调用的,求详解... 数组指针和指针数组怎样理解?作为函数参数时,怎样调用? 如何定义指向函数的指针? c++指向函数的指针数组的定义和用法 函数指针数组怎么声明 数组指针,指针函数和函数指针两组对应的区别 返回值是一个数组指针的函数怎么定义? 指向函数的指针与指向数组的指针的声明定义的写法 C语言如何定义一个长度为3的函数指针数组?又如何定义一个长度为3的模板函数指针数组? 视力模糊头疼什么原因?有什么办法改善? 捷波朗炫石蓝牙耳机效果怎么样 为什么比其他耳机贵了那么多 眼睛花,之后开始头疼,恶心。 请问捷波朗的蓝牙耳机怎么样 突然眼睛模糊,接着头疼,有时有轻微的恶心 眼睛经常模糊不清并伴有头痛可能是什么病引起的? Jabra蓝牙耳机怎么样好不好 同价位的捷波朗蓝牙耳机和JEET蓝牙耳机,哪个更值得入手? 捷波朗蓝牙耳机好用吗?不知道是买派可蓝牙耳机还是买捷波朗的? 我老头疼恶心有时眼睛模糊看不清楚该怎么治疗