这代码问题 #include<stdio.h> void func(int a[];int n) { int i,j,k; for(i=9,j=0;j<i;i--,j++) { k=a[i]; a[i]=a[j]; a[j]=k; } } void func(int a[];int n) int main() { int a[]; int n,i; func(a,n); for(i=0;i<n;i++) printf("%d",a[i]); return 0; }
时间: 2024-03-16 11:42:05 浏览: 78
这段代码有很多问题:
1. 在函数定义中,C语言不支持用分号表示参数列表的结束,应该使用逗号。
2. 在函数定义中,应该先声明参数类型,再声明参数名称。
3. 在函数调用时,应该传入参数值,而不是未初始化的变量。
4. 在主函数中定义数组时,应该指定数组的大小。
5. 在主函数中调用函数时,应该传入数组的地址,而不是数组的值。
6. 在输出数组元素时,应该使用空格或换行符分隔每个元素。
下面是修正后的代码:
```
#include <stdio.h>
void func(int a[], int n) {
int i, j, k;
for (i = n - 1, j = 0; j < i; i--, j++) {
k = a[i];
a[i] = a[j];
a[j] = k;
}
}
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 10, i;
func(a, n);
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
这段代码的作用是将数组元素倒序输出,修正后的代码能够正常工作。
相关问题
#include <stdio.h> void func(int num) { *(int*)num = 6666; } int main() { int num = 1234; func((int)&num); printf("%d\n",num); }
这段代码存在一个问题。在函数 `func` 中,`num` 是作为指针传递给函数的。但是在函数中,它被强制转换为 `int*` 类型并尝试修改其值。然而,`num` 本身是一个整数值,而不是一个有效的内存地址。
这样的操作是非法的,并且可能导致程序崩溃或产生未定义的行为。如果您想要修改 `num` 的值,您可以将 `num` 声明为指针类型,并传递其地址给 `func` 函数。以下是修正后的代码:
```c
#include <stdio.h>
void func(int* num)
{
*num = 6666;
}
int main()
{
int num = 1234;
func(&num);
printf("%d\n", num);
return 0;
}
```
这样修改后,函数 `func` 中的参数 `num` 将接收到 `num` 的地址,然后通过解引用指针来修改 `num` 的值。在主函数中,我们将 `num` 的地址传递给 `func` 函数以实现修改。
#include<pthread.h> #include<stdlib.h> #include <stdio.h> #include <sys/types.h> #include<signal.h> #include <unistd.h> void func () ; int main (void *arg) { int i,j; signal (17,func); int iPID=fork () ; if(iPID>0){ printf("PID:%d,Parent: Signal 17 will_be send to Child! " , getpid()) ; kill(iPID,17) ; printf ( "PID:%d, Parent: finished! " , getpid() ); } else { printf ( "PID:%d " , getpid()); sleep (1); printf ("PID:%d, Child: finished ! " , getpid()); exit (0); } return 0; } void func ( ) { printf("PID:%d,It is signal 17 processing function! " , getpid() ) ; }
这是一个用 C 语言写的进程间通信程序,使用了 fork 函数创建子进程,并在父进程中向子进程发送信号。
程序中先定义了一个 signal 函数的回调函数 func,用于接收信号 17,并在接收到信号后打印一条信息。
在 main 函数中,首先使用 signal 函数注册信号 17 的处理函数为 func。然后使用 fork 函数创建一个子进程。如果 iPID>0,则表示当前进程是父进程,它会打印出自己的进程 ID(PID),然后向子进程发送信号 17。接着父进程会打印出自己的进程 ID 并结束。
如果 iPID=0,则表示当前进程是子进程,它会打印出自己的进程 ID,然后等待 1 秒钟,最后打印出自己的进程 ID 并结束。
需要注意的是,进程间通信的方式有很多种,这里使用信号是其中的一种。在程序中使用了 signal 函数注册信号处理函数,同时使用了 kill 函数向子进程发送信号。在实际场景中,还可以使用共享内存、消息队列、信号量等方式进行进程间通信。
阅读全文