void funcA(int**a,int**b) { static int n = 100; static int m = 1100; *a =&n; *b = &m; } #define null 0 int main() { int** a=null;//将指针初始化为0是个好习惯 int** b=null; funcA(a, b); printf("%p\n%p\n", *a, *b); }//这段代码没有打印出任何结果
时间: 2024-01-17 08:37:27 浏览: 38
根据你提供的代码,我注意到你在main函数中将指针a和b初始化为null,然后调用funcA函数将n和m的地址分别赋给*a和*b。然后你使用printf函数打印指针a和b的地址。
然而,这段代码没有打印出任何结果的原因是,你将指针a和b初始化为null,这意味着它们指向空地址,而不是指向任何有效的内存空间。当你将n和m的地址赋给*a和*b时,实际上是将n和m的地址赋给了空指针,这是不正确的操作。
要解决这个问题,你可以修改main函数中的指针初始化部分,为a和b分配合适的内存空间。例如,你可以使用malloc函数动态分配内存,如下所示:
```c
int* n = malloc(sizeof(int));
int* m = malloc(sizeof(int));
*a = n;
*b = m;
```
这样就为a和b分配了内存,并使它们指向有效的地址。然后再调用funcA函数进行赋值操作。
请记得在程序结束前使用free函数释放动态分配的内存,以避免内存泄漏。
希望这可以解决你的问题!如果你有任何其他问题,请随时提问。
相关问题
在 C 语言和汇编语言混合编程时,TI 公司的 TMS32C55x 系列 DSP 的 C 程序 和汇编程序之间通过寄存器或堆栈来传递数据。请写出混合编程时下面子程序的 返回参数和入口参数的放置位置。 struct st_a { int x[10] }; struct st_b { int x}; int funcA( int* a, long b, int c, float d, int e, long f, int* g); int* funcC( int* a, long *b, int c, long d);
在 TMS32C55x 系列 DSP 的混合编程中,C 程序和汇编程序之间通过寄存器或堆栈传递数据。下面是子程序 funcA 和 funcC 的参数和返回值的放置位置:
对于 funcA 子程序,参数的放置位置如下:
- a: 通过寄存器 A0 传递指向 int 类型的指针。
- b: 通过寄存器 B0 和 B1 传递 long 类型的值。
- c: 通过寄存器 A1 传递 int 类型的值。
- d: 通过浮点寄存器 F2 传递 float 类型的值。
- e: 通过寄存器 A2 传递 int 类型的值。
- f: 通过寄存器 B2 和 B3 传递 long 类型的值。
- g: 通过寄存器 A3 传递指向 int 类型的指针。
返回值的放置位置如下:
- 返回值: 通过寄存器 A4 传递 int 类型的值。
对于 funcC 子程序,参数的放置位置如下:
- a: 通过寄存器 A0 传递指向 int 类型的指针。
- b: 通过寄存器 B0 和 B1 传递指向 long 类型的指针。
- c: 通过寄存器 A1 传递 int 类型的值。
- d: 通过寄存器 B2 和 B3 传递 long 类型的值。
返回值的放置位置如下:
- 返回值: 通过寄存器 A4 传递指向 int 类型的指针。
在主函数的最开始会初始化一个全部变量 g_i4event 为 0。 本关的编程任务是补全右侧代码片段中两段Begin至End中间的代码,具体要求如下: 在 do _signal中分别为信号 SIGUSR1 、 SIGUSR2 注册信号处理函数 funcA 和 funcB ,而后将 g_i4event 置为 1; 完成两个信号处理函数,其中 funcA 中将 g_i4event 置为 2, funcB 中将 g_i4event 为 3。#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> int g_i4event; typedef void (*sighandler_t)(int); /********Begin********/ /*实现funcA和funcB*/ /*********End*********/ int do_signal(void) { /********Begin********/ /*********End*********/ }
下面是代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
int g_i4event;
typedef void (*sighandler_t)(int);
void funcA(int signum) {
g_i4event = 2;
}
void funcB(int signum) {
g_i4event = 3;
}
int do_signal(void) {
signal(SIGUSR1, funcA);
signal(SIGUSR2, funcB);
g_i4event = 1;
}
需要注意的是,信号处理函数要求是 void 类型,参数是 int 类型的信号编号。在这个问题中,我们需要实现两个信号处理函数 funcA 和 funcB,并在函数 do_signal 中分别为 SIGUSR1 和 SIGUSR2 注册这两个信号处理函数,同时将 g_i4event 置为 1。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)