初级会员

- 积分
- 128
- 金钱
- 128
- 注册时间
- 2017-8-28
- 在线时间
- 39 小时
|

楼主 |
发表于 2018-2-24 15:54:50
|
显示全部楼层
本帖最后由 foodyou 于 2018-2-24 16:44 编辑
拷贝传参这个我知道,意思就是函数内的值是一份副本吧,如果函数外声明一个值 i, 然后把这个 i 传入函数, 分别在函数外和函数内对 i 寻址, 这样会得出2个不同的地址,这个可以很清楚知道这2个 i 实际上是两个不同的东西,虽然数值相同,但是在内存里面实际上是不同的。
但是我不明白的是,现在我把数组传入函数,我在函数外和函数内分别对这个数组寻址,地址是一样的呀(还是我代码写错了?各位帮忙看一下),所以我才觉得不是形参的问题,还是形参的概念上面还有其他方面的描述我不知道。。。
[mw_shl_code=c,true]#include <stdio.h>
unsigned char buff[20];
unsigned char len = 3;
void set(void){
buff[0] = 0xaa;
buff[1] = 0xbb;
buff[2] = 0xcc;
}
void func(unsigned char *buff, unsigned char len){
printf("%p", buff);
printf("---");
while(len--){
printf("%u", *buff++);
printf(",");
}
}
unsigned char i = 0;
void func2(unsigned char i){
printf("%p", &i);
}
int main(void) {
set();
func(buff, len);
//printf("---");
printf("%p", buff);
printf("---");
printf("%u", *buff);
//--------------------------
printf("===");
printf("%p", &i);
printf("---");
func2(i);
}[/mw_shl_code]
还是因为我把形参名和全局变量名都写成一样有时把自己也搞混了 。。。我再试试 。。。
如果我把中间func那个函数中的形参改成 buff1,这样就很清楚buff 和 buff1 是不同的指针,他们只是指向内存里面相同的地址。。。
哈,或者是我对指针这个东西理解不够充分 。。。或者这个问题奇怪的地方应该在于,如果我对一个指针寻址,应该得到的是指针的地址,但是现在我对一个因为传入函数,由数组变成指针的指针寻址,得出的竟然是原来数组的地址,而不是形参指针的地址 。。。
|
|