1. 程式人生 > >C語言指標題集

C語言指標題集

1. 若有說明:int a=2, *p=&a, *q=p;,則以下非法的賦值語句是()。

A. p=q;           B. *p=*q;        C. a=*q;         D q=a;

2. 若定義:int a=511, *b=&a;,則printf("%d\n", *b);的輸出結果為:

 A. 無確定值       B. a的地址       C. 512           D 511

3. 已有定義 int a=2, *p1=&a, *p2=&a; 下面不能正確執行的賦值語句是()。

A. a=*p1+*p2;     B

 p1=a;          C. p1=p2;        D. a=*p1*(*p2);

4.變數的指標,其含義是指該變數的()。

A. 值             B地址          C.名            D.一個標誌

5. 若有說明語句:int a, b, c, *d=&c;,則能正確從鍵盤讀入三個整數分別賦給變數a、b、c的語句是()。

A scanf("%d%d%d", &a, &b, d);

B. scanf("%d%d%d", a, b, d);

C. scanf("%d%d%d", &a, &b, &d);       

D. scanf("%d%d%d", a, b,*d);

6.若已定義int a=5; 下面對(1)、(2)兩個語句的正確解釋是()。

(1) int *p=&a;                 (2) *p=a;

A. 語句(1)和(2)中的*p含義相同,都表示給指標變數p賦值。

B. (1)和(2)語句的執行結果,都是把變數a的地址值賦給指標變數p。

C. (1)在對p進行說明的同時進行初始化,使p指向a;

(2)變數a的值賦給指標變數p。

D (1)在對p進行說明的同時進行初始化,使p指向a

  (2)將變數a的值賦予

*p

7.若有語句int *p, a=10; p=&a; 下面均代表地址的一組選項是()。

A. a, p, *&a                             B. &*a, &a, *p

C. *&p, *p,&a                           D&a, &*p, p

8. 若需要建立如圖所示的儲存結構,且已有說明double *p, x=0.2345; 則正確的賦值語句是()。

A. p=x;                                  B p=&x; 

C. *p=x;                                 D. *p=&x;

9.若有說明:int *p, a=1, b; 以下正確的程式段是()。

A.p=&b;                                 B. scanf("%d",&b);

scanf("%d", &p);                            *p=b;

C. p=&b;                                 D p=&b;

scanf("%d", *p);                             *p=a;

10.有如下語句:int m=6, n=9, *p, *q; p=&m; q=&n; 如圖1所示,若要實現下圖所示的儲存結構,可選用的賦值語句是()。

    A. *p=*q;                                B. p=*q;

    C p=q;                                  D. *p=q;

11.以下程式中呼叫scanf函式給變數a輸入數值的方法是錯誤的,其錯誤原因是()。

   #include <stdio.h>

   main()

{

int *p, *q, a, b;

p=&a;

printf("input a:");

scanf("%d", *p);

…   

}

A. *p表示的是指標變數p的地址

B *p表示的是變數a的值,而不是變數a的地址

C. *p表示的是指標變數p的值

D. *p只能用來說明p是一個指標變數

12.下面程式的功能是從輸入的十個字串中找出最長的那個串。請在________處填空。

   #include "stdio.h"

   #include "string.h"

   #define N 10

   main()

{

char s[N][81], * t;

int j;

  for (j=0; j<N; j++)

 gets (s[j]);

t= *s;

  for (j=1; j<N; j++)

 if(strlen(t)<strlen(s[j]))   ________;

   printf("the max length of ten strings is: %d, %s\n", strlen(t), t);

}

A t=s[j]      B. t=&s[j]         C. t= s++          D. t=s[j][0]

13.下面判斷正確的是()。

A. char *s="girl";                等價於 char *s; *s="girl";

B. char s[10]={"girl"};            等價於  char s[10]; s[10]={"girl"};

C char *s="girl";                等價於   char *s; s="girl";

D. char s[4]= "boy", t[4]= "boy";   等價於 char s[4]=t[4]= "boy"

14.設char *s="\ta\017bc";則指標變數s指向的字串所佔的位元組數是()。

A. 9                   B. 5            C  6             D. 7

15.下面程式段中,for迴圈的執行次數是()。

   char *s="\ta\018bc";

   for (;*s!='\0';s++) printf("*");

A. 9                   B. 5            C  6             D.7

16.以下不能正確進行字串賦初值的語句是()。

A.     char str[5]= "good!";        

B. char *str="good!";

C.     char str[]="good!"; 

    D. char str[5]={'g', 'o','o', 'd'};

17.若指標p已正確定義,要使p指向兩個連續的整型動態儲存單元,不正確的語句是()。

A p=2*(int *)malloc(sizeof(int));

B. p=(int *)malloc(2*sizeof(int));

C. p=(int *)malloc(2*2);

D. p=(int*)calloc(2, sizeof(int));

18.下面程式段的執行結果是()。

  char *s="abcde";

   s+=2;

   printf("%d", s);

A. cde      B.字元'c'    C字元'c'的地址     D.無確定的輸出結果

19.設有如下的程式段:char s[]="girl", *t;   t=s;則下列敘述正確的是()。

A. s和t完全相同

B. 陣列s中的內容和指標變數t中的內容相等

C. s陣列長度和t所指向的字串長度相等

D *ts[0]相等

20.以下正確的程式段是()。

A. char s[20];                               B. char *s;

  scanf("%s", &s);                             scanf("%s", s);

C char s[20];                              D. char s[20], *t=s;

    scanf("%s",&s[2]);                           scanf("%s", t[2]);

21.下面程式段的執行結果是()。

#include "stdio.h"

main()

{

 int m=10, n=20;

  char *format="%s, m=%d, n=%d\n";

  m*=n;

 printf(format, "m*=n", m,n);

}

A. format, "m*=n", m, n                      B. format, "m*=n"

C m*=n, m=200, n=20                        D. 以上結果都不對

22.以下與庫函式strcpy(char *p, char *q)功能不相等的程式段是()。

A. strcpy1(char *p, char *q)

{ while ((*p++=*q++)!='\0');

}

B. strcpy2( char *p, char *q)

{   while((*p=*q)!='\0')

        {p++;      q++;}

}

C. strcpy3(char*p, char *q)

{  while (*p++=*q++);

}

   D strcpy4(char *p, char *q)

      {   while(*p)

             *p++=*q++;

}

23.下面程式段的執行結果是()。

#include "stdio.h"

   main()

char s[]="example!", *t;

      t=s;

       while( *t!='p')

{ printf("%c",*t-32);

t++;}

}

    A.EXAMPLE!         B. example!         C EXAM         D. example!

24.以下正確的程式段是()。

A. char s[]="12345", t[]="6543d21";    strcpy( s,t);

B. char s[20],*t="12345";   strcat(s,t);

C char s[20]=" ", *t="12345";strcat(s, t);

D. char *s="12345", *t="54321";  strcat (s,t);

25.以下與庫函式strcmp(char *s, chat *t)的功能相等的程式段是()。

A. strcmp1(char *s, chat *t)

{  for ( ;*s++==*t++ ;)

        if (*s=='\0') return 0;

    return (*s-*t);

}

B. strcmp2(char *s, char *t)

  {  for( ;*s++==*t++ ;)

if (!*s) return0;

         return  (*s-*t);

  C strcmp3(char *s, char *t)

    {  for ( *t==*s )

{  if (!*t)  return 0;

   t++;

   s++;}

           return (*s-*t);

 }

D. strcmp4(char *s, char *t)

{   for( ;*s==*t;s++,t++)

    if (!*s) return 0;

return (*t-*s);

}

26.若有以下定義和語句:

int s[4][5], (*ps)[5];

ps=s;

則對s陣列元素的正確引用形式是()。

A. ps+1        B. *(ps+3)        C ps[0][2]          D. *(ps+1)+3

27.不合法的main函式命令列引數表示形式是:()。

A. main( int a,char *c[])                  B main(int argc, char *argv)

C. main( intarc, char **arv)               D. main( int argv, char*argc[])

28.若有說明語句:char  s[]="it is a example.", *t="it is aexample.";則以下不正確的敘述()。

A. s表示的是第一個字元i的地址,s+1表示的是第二個字元t的地址

B. t指向另外的字串時,字串的長度不受限制

C. t變數中存放的地址值可以改變

D s中只能存放16個字元

29.若已定義char s[10];則在下面表示式中不表示s[1]地址的是()。

A. s+1          B s++           C. &s[0]+1        D. &s[1]

30.下面程式段的執行結果是()。(注:└┘代表空格)

   #include "stdio.h"

   main()

   {   char s[6];

s="abcd";

printf("\"%s\"\n", s);

}

    A. "abcd"       B. "abcd└┘"       C. \"abcd\"      D編譯出錯

31.執行以下程式後,a的值為【1】, b的值為【2】。

#include <stdio.h>

main()

{  

int a, b, k=4, m=6, *p=&k, *q=&m;

    a=p==&m;

b=(-*p)/(*q)+7;

printf("a=%d\n", a);

printf("b=%d\n", b);

}

【1】 A. -1            B. 1            C 0             D. 4

【2】 A. 5             B. 6            C 7              D. 10

32.下面程式的功能是將字串s的所有字元傳送到字串t中,要求每傳遞三個字元後再存放一個空格,例如字串s為"abcdefg",則字串t為"abc def g",請選擇填空。

#include "stdio.h"

   #include "string.h"

   main()