整型实参可以传给指针形参吗
时间: 2023-07-16 11:16:23 浏览: 54
可以。指针形参可以接受整型实参的值,但是需要注意的是,需要将整型实参的地址传递给指针形参。例如:
```C
void func(int *ptr) {
// do something with ptr
}
int main() {
int num = 10;
func(&num); // 将num的地址传递给指针形参ptr
return 0;
}
```
在上面的示例中,我们将整型变量`num`的地址传递给了指针形参`ptr`,这样在`func`函数中就可以通过`ptr`访问到`num`的值。
相关问题
用c语言定义长度为3的整型数组,采用函数调用实现按照从大到小的顺序排序。在主函数中输出排序前和排序后的数组。按以下四种方法实现: (1)实参、形参为数组名; (2)实参为数组名,形参为指针变量; (3)实参为指针变量,形参为数组名; (4)实参为指针变量,形参为指针变量。
好的,下面是四种方法的示例代码:
(1)实参、形参为数组名
```c
#include <stdio.h>
void sort1(int arr[]) {
if (arr[0] < arr[1]) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[0] < arr[2]) {
int temp = arr[0];
arr[0] = arr[2];
arr[2] = temp;
}
if (arr[1] < arr[2]) {
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
}
int main() {
int arr[3] = {3, 2, 1};
printf("排序前: %d %d %d\n", arr[0], arr[1], arr[2]);
sort1(arr);
printf("排序后: %d %d %d\n", arr[0], arr[1], arr[2]);
return 0;
}
```
(2)实参为数组名,形参为指针变量
```c
#include <stdio.h>
void sort2(int* arr) {
if (arr[0] < arr[1]) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[0] < arr[2]) {
int temp = arr[0];
arr[0] = arr[2];
arr[2] = temp;
}
if (arr[1] < arr[2]) {
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
}
int main() {
int arr[3] = {3, 2, 1};
printf("排序前: %d %d %d\n", arr[0], arr[1], arr[2]);
sort2(arr);
printf("排序后: %d %d %d\n", arr[0], arr[1], arr[2]);
return 0;
}
```
(3)实参为指针变量,形参为数组名
```c
#include <stdio.h>
void sort3(int arr[3]) {
if (arr[0] < arr[1]) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
if (arr[0] < arr[2]) {
int temp = arr[0];
arr[0] = arr[2];
arr[2] = temp;
}
if (arr[1] < arr[2]) {
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
}
int main() {
int arr[3] = {3, 2, 1};
printf("排序前: %d %d %d\n", arr[0], arr[1], arr[2]);
sort3(arr);
printf("排序后: %d %d %d\n", arr[0], arr[1], arr[2]);
return 0;
}
```
(4)实参为指针变量,形参为指针变量
```c
#include <stdio.h>
void sort4(int* a, int* b, int* c) {
if (*a < *b) {
int temp = *a;
*a = *b;
*b = temp;
}
if (*a < *c) {
int temp = *a;
*a = *c;
*c = temp;
}
if (*b < *c) {
int temp = *b;
*b = *c;
*c = temp;
}
}
int main() {
int a = 3, b = 2, c = 1;
printf("排序前: %d %d %d\n", a, b, c);
sort4(&a, &b, &c);
printf("排序后: %d %d %d\n", a, b, c);
return 0;
}
```
这四种方法都可以实现将数组按从大到小的顺序进行排序,只是形参和实参的类型不同。其中第一种方法和第二种方法比较常见,建议使用其中的一种。
. 定叉长度为了的整型教組,采用函数调用实现按照从大到小的 顺序排序。在主西数中输出排序前和排序后的数組。按以下四种方法实 现: (1)实参、形参为数组名; (2)实参为数组名,形参为指针麥量; (3) 实参为指针变量,形参为数组名: (4)实参为指针变量,形参为指针变量。
好的,下面是四种方法的代码实现:
(1) 实参、形参为数组名:
```c
#include <stdio.h>
void sort1(int arr[], int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
sort1(arr, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
(2) 实参为数组名,形参为指针变量:
```c
#include <stdio.h>
void sort2(int *arr, int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (*(arr + j) < *(arr + j + 1)) {
temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
sort2(arr, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
(3) 实参为指针变量,形参为数组名:
```c
#include <stdio.h>
void sort3(int arr[], int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
int *p = arr;
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
sort3(p, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
```
(4) 实参为指针变量,形参为指针变量:
```c
#include <stdio.h>
void sort4(int *arr, int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (*(arr + j) < *(arr + j + 1)) {
temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
int *p = arr;
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
sort4(p, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
```
以上四种方法都可以实现对整型数组的从大到小排序。其中,第一种方法的形参为数组名,与数组本身有相同的地址,因此可以直接对数组进行排序;第二种方法的形参为指针变量,需要用指针运算符 `*` 对指针进行解引用操作;第三种方法的实参为指针变量,需要用指针运算符 `*` 对指针进行解引用操作;第四种方法的实参和形参都为指针变量,需要用指针运算符 `*` 对指针进行解引用操作。