#include <stdio.h>
{ int a[ ]={1,-2,3,-4,5}, *p, *q=a+4;
while(p<q)
{ p++, q--; }
printf(“%d\n”, *q);
return 0;
}
```int main( )
{ int a[ ]={1,-2,3,-4,5}, *p, *q=a+4;
while(p<q)
{ p++, q--; }
printf(“%d\n”, *q);
return 0;
}
这段代码虽然没有语法错误,但是存在一些问题:
没有为指针变量p赋初值,使用指针变量p时会出现未定义的行为,可能导致程序崩溃或产生不可预期的结果。
在使用printf输出时,字符串的双引号使用了中文的引号“”,这样程序可能编译不通过或者产生编译警告。应该使用英文的双引号""。
针对这些问题,我们可以对代码进行以下修改,如下所示:
#include <stdio.h>
int main()
{
int a[] = {1, -2, 3, -4, 5};
int *p = a, *q = a + 4;
while (p < q) {
p++, q--;
}
printf("%d\n", *q);
return 0;
}
这里我们为指针变量p赋予了数组的首地址,使用时可以避免未定义行为;另外修改了printf函数输出字符串双引号的形式,避免产生编译警告。
程序错了,p没有初始化,结果不可知
public static void order(int[] array){
for (int i=0;i<array.length;i++){
for (int j=i+1;j<array.length;j++){
if (array[i]>array[j]){
swap(array,i,j);
}
}
}
show(array);
}
//
答案:
问题1: 运行结果无法确定,因为代码提供的是定义和声明,并没有完整的代码实现。根据提供的部分代码可以得知,p是一个数组指针,q是一个指针数组。将二维数组a的首地址赋给p,将a的每一行的首地址分别赋给q数组中对应位置。其中,p和q有指向相同地址的可能,但是它们的类型不同,p是数组指针,q是指针数组。在程序中要注意类型匹配。
问题2: 当某个线程正在运行时系统中执行时发生一个时钟中断,可能会出现调度队列不一致的情况。解决方法可以设置一个标志,在进入runtime系统后设置标志,时钟处理程序看到该标志后设置自己的标志并返回。当runtime系统完成后,检测是否有时钟中断发生,并且现在运行时钟处理程序。
问题3: 代码实现了在已经升序排列的数组中插入输入的整数,并将数组输出。如果输入的整数比数组中所有元素都小,则将数组整体后移一位,并将输入的整数放在数组第一位。如果输入的整数比数组中最后一个元素还大,则将输入的整数放在数组最后一位。若输入的整数在数组两元素之间,则将该整数插入到合适的位置并将数组在该位置之后的元素往后移一位。
问题4: 回调函数是一个函数指针,可以作为函数的参数传递给另一个函数。在给定条件下,执行传入的回调函数。该示例代码包含三个回调函数call_back_1()、call_back_2()和call_back_3(),和一个Handle()函数,Handle函数可以调用call_back_X()。主函数将call_back_X()函数的地址传递给Handle()函数,在Handle()函数中调用function指向的函数。输出结果为依次执行了三个回调函数。