请教*P和P[0]的区别?

zhuangmin 2005-04-11 12:11:32
一个数组,比如int P[10]
如果当作传递参数时,*P和P[0]有啥区别?
实参、形参的区别?
比如
void Func(int *P)
void Func(int P[0])
...全文
1113 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
keen_2000_0 2005-04-12
  • 打赏
  • 举报
回复
看的我头晕了!
at1998 2005-04-12
  • 打赏
  • 举报
回复
?
copygirl 2005-04-12
  • 打赏
  • 举报
回复
Func( a )
这个函数,你写它是为了证明:数组变量传过去后,a++会改变其值,对不对?
那为什么你传Func( a ),而不传数组变量Func( a[0] )呢?
最后你传的是地址,值当然会变了。
copygirl 2005-04-12
  • 打赏
  • 举报
回复
什么跟什么啊
pcboyxhy 2005-04-12
  • 打赏
  • 举报
回复
Project1.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
<?xml version="1.0" encoding="UTF-16"?>
<DATABASE>
<EXE NAME="Project1.exe" FILTER="GRABMI_FILTER_PRIVACY">
<MATCHING_FILE NAME="Project1.exe" SIZE="14546" CHECKSUM="0xFD58A392" MODULE_TYPE="WIN32" PE_CHECKSUM="0xAD8E" LINKER_VERSION="0x10000" LINK_DATE="04/12/2005 06:15:38" UPTO_LINK_DATE="04/12/2005 06:15:38" />
</EXE>
<EXE NAME="kernel32.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
<MATCHING_FILE NAME="kernel32.dll" SIZE="1144320" CHECKSUM="0x8E03EFD9" BIN_FILE_VERSION="5.1.2600.2180" BIN_PRODUCT_VERSION="5.1.2600.2180" PRODUCT_VERSION="5.1.2600.2180" FILE_DESCRIPTION="Windows NT BASE API Client DLL" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft(R) Windows(R) Operating System" FILE_VERSION="5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="(C) Microsoft Corporation. All rights reserved." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x1242EA" LINKER_VERSION="0x50001" UPTO_BIN_FILE_VERSION="5.1.2600.2180" UPTO_BIN_PRODUCT_VERSION="5.1.2600.2180" LINK_DATE="08/16/2004 23:38:36" UPTO_LINK_DATE="08/16/2004 23:38:36" VER_LANGUAGE="中文(中国) [0x804]" />
</EXE>
</DATABASE>




Func(a[0]);//这个是错误的,我为什么要写。 如果A[0] = -100呢?
--------------------

Func(a[0]);这样写是错的吗?你试过了吗?
既然你已经定义过了:int a[]={1,2,3};
难道不知道a[0]就是1?

晕哦

这样写的结果就是上面的强制关闭
little_paradise 2005-04-12
  • 打赏
  • 举报
回复
作为函数参数,他们没有任何区别,一个指针么
rocklabzhang 2005-04-12
  • 打赏
  • 举报
回复
数组名作为函数参数,会被弱化成相应的指针类型,传的是地址
数组元素作为函数参数,和一般的传值是一样的
zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
但用*P也是传值啊
copygirl 2005-04-11
  • 打赏
  • 举报
回复
最后一句对了。
用P[0]做参数与用普通变量做参数无区别。
都只是传值,不是传地址。
你把数组理解为若干个变量的集合就可以了。
zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
emm.....
还不是很明白, pcboyxhy的意思是这个Func(*P)只是传递了P指针的值嘛,就是传说中的行参?
不会因为调用函数对参数的改变而影响改变参数的值?
有点晕晕的。

用&做引用就有区别了,那还是没提到P[0]做参数啊?
偶笨
pcboyxhy 2005-04-11
  • 打赏
  • 举报
回复
void Func(int *P)


传过去的不过是指针的值
不是指针的地址
所以改变P的值不会影响 调用这个函数的那个函数里面P的值

void Func(int *P)
{
P++;
}

int *p=malloc(100);
Func(p); //p的值不便

zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
*P==P[0]偶晓得,但做参数传递时有啥不同呢?
苦闷,前天被问到这问题,当时胡说了点
zhousqy 2005-04-11
  • 打赏
  • 举报
回复
沒有區別,都是一個指針。
llmsn 2005-04-11
  • 打赏
  • 举报
回复
代表的是一个意思.
zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
谢谢小猩猩,但偶想问做参数传递的时候,会不会有什么情况发生,比如会泄露内存或指针P被改变了。

究竟有啥区别呢?
pcboyxhy 2005-04-11
  • 打赏
  • 举报
回复
没有区别
*(p+i) 就是 p[i] 这里是这样的
fjliningcd 2005-04-11
  • 打赏
  • 举报
回复
void Func(int *P)
void Func(int P[0])
对于函数的参数为数组类型,实际上都被编译器认为是指针类型
所以
void Func(int *P)
void Func(int p[0])
void Func(int p[])
void Func(int p[1])
这些
实际上都为被编译器认为

void Func(int *P)


这个我爱看,哈哈,如果能这样理解就好了
========================================
就这样概括
这里sizeof(p) = 4,就可以说明他们确实都是当作指针用,ok


gudulyn 2005-04-11
  • 打赏
  • 举报
回复
看的头都大了,建议搂主看明白了,给大家总结一下。先谢过了。
xjp6688 2005-04-11
  • 打赏
  • 举报
回复
void Func(int *P)
建议这样使用,关于这些问题,建议看C专家编程
superspeed2005 2005-04-11
  • 打赏
  • 举报
回复
声明函数的时候 还没看到过 void func( int p[0] )
这种形式 真是自己找麻烦 看得头晕
加载更多回复(28)

69,322

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧