指针作为函数的参数问题

这是课件ppt,我在电脑上敲了一遍但有标黄的,但是能出正确结果,请问代码需要改动吗

img

img

虽然这段代码能正常运行,并且输出1,但是其中的函数fun4存在问题。在函数fun4中,参数p是一个指向指针的指针,但是在函数中却将其赋值给了一个指向数组的指针q。这样会导致q指向的地址与p指向的地址不同,从而无法正确访问数组a中的元素。正确的做法是将函数fun4的参数改为int (p)[2],这样p就是一个指向数组的指针,可以直接赋值给q
如果对你有所帮助的话,请给我一个采纳哦,谢谢啦

有标黄只是警告,只要能运行就说明没问题,放心大胆的用吧!

如果实在不放心,我给你解释一下你这个问题:
这个警告表示您正在尝试将一个指针类型不兼容的指针赋值给另一个指针。
例如:

int *p1;    // 指向int的指针 
char *p2;   // 指向char的指针

p1 = p2;   // 错误,指针类型不兼容,会产生warning

这里,p1是指向int的指针,而p2是指向char的指针,两者的指针类型不同,所以不能相互赋值,这会产生指针类型不兼容的警告。
要修复这个警告,可以:

  1. 使指针类型兼容
    要么将两个指针的类型定义为相同,例如都为void *;要么进行类型转换:
void *p1;  
void *p2; 

p1 = p2;   // ok,指针类型兼容

char *p3; 
p1 = (void *)p3; // ok,进行void* 类型转换

  1. 避免直接赋值,而是对指针指向的内容进行赋值
    例如,不直接将指针赋值,而是对指针操作的对象赋值:
int *p1, x; 
char *p2, y;

*p1 = x;     // ok,赋值指针操作的对象 
*p2 = y;

  1. 使指针指向动态分配的内存空间
    可以通过malloc()等函数向动态分配一片内存,然后让两个指针都指向这片内存:
int *p1, *p2;  
int *mem = malloc(sizeof(int));

p1 = mem;   // ok,指向同一动态内存
p2 = mem; 

  1. 重新检查指针使用,避免不兼容的赋值操作
    如果指针赋值真的需要进行,需要重新检查指针类型定义,避免定义为不兼容的类型。
    希望上述分析和提示能够帮助您理解并修复“指针类型不兼容”的警告。