函数调用时,实参与形参都为变量,则这两个变量不可能占用同一内存空间
时间: 2023-10-31 17:05:18 浏览: 205
在函数调用时,实参和形参都是变量,但它们可能占用同一内存空间。这取决于传递参数的方式。
在 C 语言中,参数传递有两种方式:值传递和指针传递。在值传递中,实参的值被复制到形参中,因此它们占用不同的内存空间。而在指针传递中,实参的地址被传递给形参,形参指向实参所占用的内存空间,因此它们可能占用同一内存空间。
例如,以下代码演示了指针传递的情况:
```
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
printf("Before swap: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
return 0;
}
```
在 `swap` 函数中,`a` 和 `b` 都是指向 `main` 函数中的 `x` 和 `y` 的指针,因此它们可能占用同一内存空间。但是,由于使用了指针传递,可以通过 `*a` 和 `*b` 访问它们所指向的内存空间,而不会出现内存冲突的情况。
相关问题
2. 编写一个程序,其中用户自定义函数strcompare函数实现两个字符串s1,s2的比较,函数原型声明为:int strcompare( char *str1 , char *str2 ) ; 分别有如下要求: (1)调用函数时实参用数组名,函数形参用指针变量。 (2)调用函数时实参和函数形参都用指针变量。 (3)调用函数时实参用指针变量,函数形参用数组名。 [注]: (1)要求当s1== s2时,函数返回值为0;如果s1≠ s2,返回它们二者第一个不相同字符的ASCII码差值(如“BOY”与“BAD
好的,这是一个简单的字符串比较程序,我帮您实现一下:
```c
#include <stdio.h>
int strcompare1(char *str1, char *str2);
int strcompare2(char *str1, char *str2);
int strcompare3(char str1[], char str2[]);
int main()
{
char s1[100], s2[100];
printf("请输入两个字符串:\n");
scanf("%s %s", s1, s2);
printf("使用方法1比较结果:%d\n", strcompare1(s1, s2));
printf("使用方法2比较结果:%d\n", strcompare2(s1, s2));
printf("使用方法3比较结果:%d\n", strcompare3(s1, s2));
return 0;
}
int strcompare1(char *str1, char *str2)
{
while (*str1 == *str2) {
if (*str1 == '\0') {
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}
int strcompare2(char *str1, char *str2)
{
while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2) {
str1++;
str2++;
}
return *str1 - *str2;
}
int strcompare3(char str1[], char str2[])
{
int i = 0;
while (str1[i] != '\0' && str2[i] != '\0' && str1[i] == str2[i]) {
i++;
}
return str1[i] - str2[i];
}
```
我们实现了三个不同的字符串比较函数,分别用了不同的调用方法,可以根据实际需求选择。
若数组名以形参作为实参二指针变量作为形参,函数调用实参传给形参的是
指向数组首元素的指针。
当我们将数组名作为函数参数传递时,实际上传递给函数的是数组的地址,也就是指向数组首素的指针。在函数中,我们可以通过指针来访问数组中的每一个元素。
当我们将二维数组作为函数参数传递时,实际上传递给函数的是指向二维数组首元素的指针,也就是指向第一行的指针。我们可以通过指针来访问整个二维数组。
阅读全文