百家拳C测试中心

相关链接

    C语言指针测试题(2)

  1. 在程序中如何声明指针,指针必须定义哪些内容或赋予哪些意义?

  2. 声明指针时,必须定义指针属于何种数据类型,在数据类型后加上“*”符号,再赋予指针名称。
  3. *c+b与c+&b意义有何相同与不同之处?请讨论.

  4. *c=b表示变量b的值存储至c所指向的内存位置,如果改变了c内存位置的值,对b的值不会有影响。
  5. 下面的程序有什么错误?
    01 #include
    02
    03 int main(void) 04 {
    05 int*x,y;
    06 int input;
    07
    08 x=&input;
    09 y=&input;
    10 printf(“x=%x\n”,x);
    11 printf(“y=%x\n”,y);
    12
    13 return 0;
    14 }

  6. 第05行有错误,这是个经常发生的错误,原程序将只声明x为整数指针,而将y声明为整数变量,应将第05行修改如下: int *x,*y;
  7. 下列程序代码在编译过程中有两个错误,指出这两个错误并修改程序代码,使其能正确执行.
    01 #include
    02 int main(void)
    03 {
    04 int iNumber=10;
    05 int*pinIndex=0;
    06 int*piGet_Number=iNumber;
    07 int*piDollar=(int*)malllc(sizeof(int));
    08 piDollar=10;
    09 if(piIndex!=0)
    10 {
    11 printf(“%s%#x\n”,”变量所指地址为”,piIndex);
    12 printf(“%s%d\n”,”iIndex变量值为”,*piIndex);
    13 }
    14 printf(“%s%#x\n”,”piGet_Number变量怕指地址为”,piGet_Number);
    15 printf(“%s%d\n”,”piGet_Numbet变量值为”,*piGet_Number);
    16 printf(“%s%#\n”,”piDollar变量所指地址为”,piDollar);
    17 printf(“%s%d\n”,”piDollar变量值为”,*piDollar);
    18 return 0;
    19 }

  8. 在第06行iNumber前加:“&”取址运算符,因为piGet_Number是一个指针,必须指派实体变量的地址。第08行的piDollar前需加上“*”取值运算符,才能将数据存到piDollar指针的地址里。
  9. 说明取址运算符“&”与取值运算符“*”有什么作用?

  10. 取址运算符“&”是用来取得变量存储数据的地址值,取值运算符“*”则是取得指针变量值所代表地址的数据值。
  11. 以下这个程序是个初学指针的学生写的程序,他希望通过操作指针q来改变变量p的值,原先想要p的值为2,但却打印出了奇怪的结果.请问错误出在哪里?
    01 #include
    02
    03 int main(void)
    04 {
    05 int p=1,*q;
    06
    07 q=&p;
    08 *q++;
    09 printf(“p=%d\n”,p);
    10 printf(“*q=%d\n,*q”);
    11
    12 return 0;
    13 }

  12. “++”运算符的优先权高于“*”运算符,原程序是先移动q的内存地址,再取值的这个程序要按照题意改变p的值,将弟08行修改如下 (*q)++
  13. 当声明数组与指针取得内存变量数据时,再都有何差异?

  14. 数组适合声明固定区块的变量数据,可以防止读取或写入时,超出设置数据范围的内存:指针不适合一定范围内的内存读取,因为有可能地址值已超出设置范围,而造成读取或是写入错误的情形发生。
  15. 双得指针的主要用途是什么?

  16. 函数指针与一般指针一样,主要用途是存储地址值,但在执行前必须先将函数指针指向正确的函数起始地址。
  17. 说明动态分配数组的重点。

  18. 函数指针未指向函数地址,这样的错误轻则产生错误信息,重则可能导致死机,这是因为当函数指针未指派函数地址时,函数指针的内容值就是个不确定的数值,如果就此执行该数值所代表的地址,系统将无法判断该地址是什么
  19. 下列程序代码为圆半径的设置,写聘书第07和08行的打印结果?
    01 #include
    02 int main()
    03 {
    04 int iRadius=10;
    05 int*piRadius=&iRadius;
    06
    07 printf(“*piRadius值为%d\n’m*piRadius);
    08 printf(“piRadius[0]值为%d\n”,piRadius[0]);
    09 return 0;
    10 }



  20. 第07行为10;第08行为10。
  21. 如何在C中包括绝对路径文件?

  22. 使用URLConnection即可。
  23. 下面这个程序有无错误?如果有错,如何改正?
    01 #include
    02
    03 int main(void)
    04 {
    05 char p[80];
    06
    07 p=”123456789”
    08
    09 printf(“%s”,p);
    10 retrun 0;
    11 }

  24. 固定长度的字符数组,不能直接指定字符串常量,如果要在程序中直接使用字符串常量指定字符串,就必须使用字符指针,程序第05行应个性如下: char *p;
  25. 如何使用一个循环列出二维数组中所有的元素值?试写出程序代码。

  26. 即使是二维数组,在内存中也是线性排列,只要先取得第一个元素的内存地址,即可使用一个循环来取出数组中所有的元素值,程序代码实例如下所示L
    #intclude
    int main()
    {
    int *ptr;
    int arr[3][3]={{1,2,3,},{4,5,6,},{7,8,9}};
    int i;
    ptr=*arr;
    for(i=0;i<9;i++)
    printf(“&d”,*(ptr+i));
    return 0;
    }
  27. 请看下列程序代码,它的写法正确吗? nt al,*pl=0;//声明变量al及指针变量p1,并且将指针变量p1的初始值设置为0

  28. 不正确。
  29. 指针的加法运算和一般变量加法运算有什么不同?

  30. 最大的差异在于当执行指针加法运算后,会将目前指针变量所指向的内存地址“向后”移动。

自我评价 答对0--2题 答对3--4题 答对5--6题 答对7--8题 答对9--10题

上一篇    下一篇