社区
C语言
帖子详情
请教*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])
...全文
1336
48
打赏
收藏
请教*P和P[0]的区别?
一个数组,比如int P[10] 如果当作传递参数时,*P和P[0]有啥区别? 实参、形参的区别? 比如 void Func(int *P) void Func(int P[0])
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
C语言int *p p=0,C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和
区别
详解
C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和
区别
详解发布时间:2020-10-04 20:48:42来源:脚本之家阅读:78作者:weixin_42182477初学者在学习C语言的时候,最头疼的可能就是指针,话不多说。让我们直接进入正题直接上代码int main(void){int *p = 0;printf("%d", *p);system("pause")...
c语言指针是0,C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和
区别
详解
初学者在学习C语言的时候,最头疼的可能就是指针,话不多说。让我们直接进入正题直接上代码int main(void){int *p = 0;printf("%d", *p);system("pause");return 0;}直接运行,好了,程序是不是报错了?那就对了。因为此时的int *p=0实际等于int *p; p=0;让我们来验证一下对不对int main(void){int *p = 0;...
小白 C语言之 指针 int *p=0;和int *p;*p=0;和”&“有什么关系和
区别
初学者在学习C语言的时候,最头疼的可能就是指针,话不多说。让我们直接进入正题 直接上代码 int main(void) { int *p = 0; printf("%d", *p); system("pause"); return 0; } 直接运行,好了,程序是不是报错了?那就对了。*因为此时的int *p=0实际等于int p; p=0; 让我们来验证一下对不对 int main(v...
int *p=0 与 int *p=NULL 的
区别
?
转自:http://bbs.csdn.net/topics/30446998 一般头文件中有 #define NULL 0 请看NULL的定义: #if !defined(__cplusplus) #define NULL ((void*)0) #else #define NULL 0 #endif 形式不同,一个是整型,一个是指针,但本质应该是一样的。 以下是C++一教
pip-matplotlib-3.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.zip
pip-matplotlib-3.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.zip
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章