行参实参搞不清楚了

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:46:22
1、如果char str
p=ss(str)
那么
1\ char*ss(char *s)
2\ char ss(char *s)
3\ char ss(char s)
分别是什么意思?
主函数内定义的是char,为什么调用函数要用*?似乎看见很多题目都是这样

2、如果定义int aa[10]={(省略)}
那么
1\ 主函数内sum(&aa[i]) 调用函数内void sum(int *a)
2\ 主函数内sum(aa[i]) 调用函数内void sum(int a)
3\ 主函数内sum(&aa[i]) 调用函数内void sum(int a)
4\ 主函数内sum(aa[i]) 调用函数内void sum(int *a)
我知道第一个是将aa的地址传给调用函数
那第二个是不是将aa的值传给调用函数?
第三个就完全不懂~
第四个和第一个性质一样吗?

C/C++中参数传递有两种方式,传值或传地址(传引用),通常我们要在被调用函数中改变一个变量的值就需要传地址调用方式,例如:
void swap_by_value(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}

void swap_by_ptr(int* pa, int* pb)
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
int main(int argc, char* argv[])
{
int a=5, b=6;
swap_by_value(a, b);
printf("a=%d, b=%d\n", a, b);
swap_by_ptr(&a, &b);
printf("a=%d, b=%d\n", a, b);
return 0;
}
很显然,通过传值调用并不能改变main函数中的a与b,要想改变a与b的值就必须通过传地址方式,然后在被调用函数中通过指针访问到主函数中的变量。
可是通过传递变量指针就一定是传地址调用么?看下面一个例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void get_str(char* p)
{
p = (char*)malloc(sizeof("abcd"));
printf("%d\n", sizeof("abcd"));
strcpy(p, "abcd");
return;
}
int main(int argc, char* argv[])
{