c++传数组传值在函数里却没有成功修改数组传值值

关于C++数组方面的几个问题?高手请进!_百度知道
关于C++数组方面的几个问题?高手请进!
C++中有没有数组拷贝函数,就是把一个数组复制到另一个数组中。相当于JAVA中的arraycopy()函数!要库函数不要自己写的!C++ 中数组能不能相互赋值?例如在JAVA中就可以把A数组直接赋给B数组:B=A
提问者采纳
c++中有字符串拷贝函数,头文件是include &string.h&strcpy(str1,str2);没有直接可以把一个数组的值传给另一个数组的函数。只能通过循环,如for(i = 0;i&10;i++)
a[i]=b[i];
提问者评价
其他类似问题
其他4条回答
但当然可以啦!只要满足长度上的要求即可,例如,定义 int a【10】,int b【10】,*p,*q; p=a; q=b;p=q;就可以满足要求了。通过指针作媒介。
复制是和C 语言一样:strcpy(str1,str2) 像你所说的相互赋值方式C++中没见过,不过也正如楼上所说,可以用指针传地址.
strcpy()只能复制char型数组,并且是以字符串来操作的,以'\0'结束,后面的忽略。还有一个memcpy(数组1,数组2,长度)给定数组名,复制长度(字节),直接把内存内容复制过去,没有类型的限制,并且对两个数组是不是同一个类型的也不要求,当然你要是混用的话你自己得知道不同类型变量在内存中的表示方式
C++中定义了一个字符串类(型),头文件是&string&,可以用string (名称)定义一个字符串,完全可以当作数组用,也可以直接用B=A,如果串联两个字符串的话也可以用B+=A之类的,至于更多的建议你上网搜索一下
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁c语言如何传递一个2维数组?在子函数中能够修改这个数组。急急急!
[问题点数:100分,结帖人flying2]
c语言如何传递一个2维数组?在子函数中能够修改这个数组。急急急!
[问题点数:100分,结帖人flying2]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分102 UID70754阅读权限10积分74帖子精华可用积分74 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 74, 距离下一级还需 126 积分
帖子主题精华可用积分74 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
小弟是一个软件工程师,做unix c/c++ java的开发,每次碰到问题都跑到CU里问人,呵呵,昨天在碰到一个指针数组的问题的时候,由于好久没用,感觉有些陌生了,所以今天归纳总结了一下,希望以后的朋友可以少走些弯路,也不知道对大家有没有用处:)
一 :关于指针和堆的内存分配
(1) 指针数组 : 一个数组里放的都是指针,我们把他叫做指针数组:)
int * a[10]; 由于它是一个数组,他是不能从堆空间里申请空间的。
只能做个循环,每个元素去申请空间,或者每个元素去指向另外的地址空间。& &&&
( 2 ) 数组指针 : 一个指向一唯或者多唯数组的指针;
int * b=new int[10]; 指向一唯数组的指针
a 指向了一个栈空间中10个并排放置的 int 型元素的首地址
int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二唯int型数组的首地址.
注意,这里的b2的类型是int (*) ,这样表示一个指向二唯数组的指针。再注意,如果这样在堆空间里已经申请了内存,在释放内存的时候要保证每个空间都要释放。
int (**b3)[2]=new (int(*)[2])[2]; b3表示一个指向(指向二唯数组的指针)的指针,我们在给他申请空间的时候一定要注意它的类型:它是int (*)型的指针,那申请空间的时候的类型为int(*)[元素个数],由于它后边还带个二唯数组每元的个数后缀,所以加上这个后缀就OK了。
int (**b4)[2];表示每一个元素都指向(指向二唯数组的指针)的数组。
由于它是数组,所以要是在堆里申请内存,就必须为每一个元素单独申请。
b4[0]=new (int(*)[2])[2];原理同上
(3) 指向了一个(指向指针的指针)
    int ** cc=new (int*)[10];
& && &&&这种声明很简单因为cc的类型是int*型的指针,所以你要在堆里申请的话就要用(int *)来申请;
(4) 多唯指针数组的指针数组。
   int ** d[2];表示一个指向指针的指针数组;数组里有两个元素,每一个元素都是一个指针,这个指针指向另一个指针:)
   再怎么变也是数组呀,呵呵,
   如果你读懂了上边的,那下边的声明就很简单了:
   d[0]=new (int *)[10];
   d[1]=new (int * )[10];
---------------------------------------
总结 : 只要知道了其中的指针类型,声明一个指针就很简单了,堆里申请稍微复杂点,不过知道了类型,也就稍微烦琐一点。
  (1)int*//指针所指向的类型是int
  (2)char*//指针所指向的的类型是char
  (3)int**//指针所指向的的类型是int*
  (4)int(*ptr)[3];//指针所指向的的类型是int()[3]
二 : 函数指针 
关于函数指针,我想在我们可能需要写个函数,这个函数体内要调用另一个函数,可是由于项目的进度有限,我们不知道要调用什么样的函数,这个时候可能就需要一个函数指针;
int a();这个一个函数的声明;
ing (*b)();这是一个函数指针的声明;
让我们来分析一下,左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型(void)和由边圆括弧中的入口参数(本例中参数是空)。注意本例中还没有创建指针变量-只是声明了变量类型。目前可以用这个变量类型来创建类型定义名及用sizeof表达式获得函数指针的大小:
unsigned psize = sizeof (int (*) ()); 获得函数指针的大小
// 为函数指针声明类型定义
typedef int (*PFUNC) ();
PFUNC是一个函数指针,它指向的函数没有输入参数,返回int。使用这个类型定义名可以隐藏复杂的函数指针语法,就我本人强烈建议我们大内弟子使用这种方式来定义;
下面是一个例子,一个简单函数指针的回调(在GNU编译器上通过,在VC上需要改变一个头文件就OK了)
#include&iostream&;& && && && &&&//GNU 编译器 g++ 实现
/*& && && && && && && && && && &//vc 的实现
#include &stdafx.h&
#include &iostream.h&;
#define DF(F) int F(){&&cout&&&this is in function &&&#F&&\
& && & return 0;& && & \
//声明定义DF(F)替代 int F();函数;
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g); DF(h); DF(i);& &&&//声明定义函数 a b c d e f g h i
// int (*pfunc)();& && && && &&&//一个简单函数指针的声明
typedef int(*FUNC)();& &//一个函数指针类型的声明
FUNC ff[] = {a,b,c,d,e,f,g,h,i};& &//声明一个函数指针数组,并初始化为以上声明的a,b,c,d,e,f,g,h,i函数
FUNC func3(FUNC vv){& & //定义函数func3,传入一个函数指针,并且返回一个同样类型的函数指针
& && & vv();
/*FUNC func4(int (*vv)()){& && &//func3的另一种实现
& && & vv();
int main(){
& && & for(int i=0;i&sizeof(ff)/sizeof (FUNC);i++){&&//循环调用函数指针
& && && && && &FUNC r=func3(ff[ i ]);
& && && && && &cout&&r()&&& && && && && & //输出返回值,只是返回了0
& && & return 0;
到目前为止,我们只讨论了函数指针及回调而没有去注意ANSI C/C++的编译器规范。许多编译器有几种调用规范。如在Visual C++中,可以在函数类型前加_cdecl,_stdcall或者_pascal来表示其调用规范(默认为_cdecl)。C++ Builder也支持_fastcall调用规范。调用规范影响编译器产生的给定函数名,参数传递的顺序(从右到左或从左到右),堆栈清理责任(调用者或者被调用者)以及参数传递机制(堆栈,CPU寄存器等)。
好了,先到此为止吧,写这篇文章耗费了基本上快半天的时间了,很多事情还没有做,等改天有时间再回来整理。
   还有很复杂的声明可能也是一种挑战 比如&&Think in c++&;&;里的
int (*(*f4())[10]();的声明,f4是一个返回指针的函数,该指针指向了含有10个函数指针的数组,这些函数返回整形值;不是这个函数有特别之处,而是Bruce Eckel 说的“从右到左的辨认规则”是一种很好的方法,值得我们去学习,感谢他:)
最后我想应该跟大家说一下,写程序应该就象我的一个朋友所说的:简单就是美;我们应该遵循一个原则 : KISS (Keep It Simple,Stupid ,尽量保持程序简单 出自 :《Practical C programming》),把自己的程序尽量的简单明了,这是个非常非常好的习惯。
由于写的匆忙,可能其中有遗漏的地方,大家发现希望能指正:)
GOOD LUCK !
经历了大风大浪,不可否认,我的神经是过敏了一点,但是我可以向你大胆的保证,我绝对是一个优秀的情报员!
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
好装B,求甚解.
空间积分0 信誉积分197 UID阅读权限100积分17435帖子精华可用积分17435 专家积分160 在线时间2512 小时注册时间最后登录
帖子主题精华可用积分17435 专家积分160 在线时间2512 小时注册时间最后登录
论坛徽章:0
原创 :彻底了解指针数组,数组指针以及函数指针
还不错的,不过离真正明白指针还有一段距离 &&
空间积分0 信誉积分8 UID阅读权限10积分0帖子精华可用积分2 专家积分0 在线时间3 小时注册时间最后登录
白手起家, 积分 0, 距离下一级还需 200 积分
帖子主题精华可用积分2 专家积分0 在线时间3 小时注册时间最后登录
论坛徽章:0
空间积分0 信誉积分1512 UID阅读权限20积分741帖子精华可用积分743 专家积分0 在线时间1870 小时注册时间最后登录
丰衣足食, 积分 741, 距离下一级还需 259 积分
帖子主题精华可用积分743 专家积分0 在线时间1870 小时注册时间最后登录
论坛徽章:1
数组指针 : 一个指向一唯或者多唯数组的指针;
int * b=new int[10];错了 int* 是指向 int的指针
不是指向数组的指针
指向一维数组的指针应该是 int(*)[X] (ps X必须是某个具体的整型常量 大于0)
空间积分0 信誉积分1512 UID阅读权限20积分741帖子精华可用积分743 专家积分0 在线时间1870 小时注册时间最后登录
丰衣足食, 积分 741, 距离下一级还需 259 积分
帖子主题精华可用积分743 专家积分0 在线时间1870 小时注册时间最后登录
论坛徽章:1
int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二唯int型数组的首地址.
注意,这里的b2的类型是int (*) ,这样表示一个指向二唯数组的指针。
错好多 b2 的数据类型是 int(*)[10] 表示一个指向int[10]的指针 当然 int[10]只是一个一维数组
浏览过的版块
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C++数组、指针与字符串
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 函数指针数组 的文章

 

随机推荐