1、指针和数组笔试题
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <string.h>
int main ( )
{
int a1[ ] = { 1 , 2 , 3 , 4 } ;
printf ( "%d\n" , sizeof ( a1) ) ;
printf ( "%d\n" , sizeof ( a1 + 0 ) ) ;
printf ( "%d\n" , sizeof ( * a1) ) ;
printf ( "%d\n" , sizeof ( a1 + 1 ) ) ;
printf ( "%d\n" , sizeof ( a1[ 1 ] ) ) ;
printf ( "%d\n" , sizeof ( & a1) ) ;
printf ( "%d\n" , sizeof ( * & a1) ) ;
printf ( "%d\n" , sizeof ( & a1 + 1 ) ) ;
printf ( "%d\n" , sizeof ( & a1[ 0 ] ) ) ;
printf ( "%d\n" , sizeof ( & a1[ 0 ] + 1 ) ) ;
char arr[ ] = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' } ;
printf ( "%d\n" , strlen ( arr) ) ;
printf ( "%d\n" , strlen ( arr + 0 ) ) ;
printf ( "%d\n" , strlen ( & arr) ) ;
printf ( "%d\n" , strlen ( & arr + 1 ) ) ;
printf ( "%d\n" , strlen ( & arr[ 0 ] + 1 ) ) ;
printf ( "%d\n" , sizeof ( arr) ) ;
printf ( "%d\n" , sizeof ( arr + 0 ) ) ;
printf ( "%d\n" , sizeof ( * arr) ) ;
printf ( "%d\n" , sizeof ( arr[ 1 ] ) ) ;
printf ( "%d\n" , sizeof ( & arr) ) ;
printf ( "%d\n" , sizeof ( & arr + 1 ) ) ;
printf ( "%d\n" , sizeof ( & arr[ 0 ] + 1 ) ) ;
char arr2[ ] = "abcdef" ;
printf ( "%d\n" , strlen ( arr2) ) ;
printf ( "%d\n" , strlen ( arr2 + 0 ) ) ;
printf ( "%d\n" , strlen ( & arr2) ) ;
printf ( "%d\n" , strlen ( & arr2 + 1 ) ) ;
printf ( "%d\n" , strlen ( & arr2[ 0 ] + 1 ) ) ;
printf ( "%d\n" , sizeof ( arr2) ) ;
printf ( "%d\n" , sizeof ( arr2 + 0 ) ) ;
printf ( "%d\n" , sizeof ( * arr2) ) ;
printf ( "%d\n" , sizeof ( arr2[ 1 ] ) ) ;
printf ( "%d\n" , sizeof ( & arr2) ) ;
printf ( "%d\n" , sizeof ( & arr2 + 1 ) ) ;
printf ( "%d\n" , sizeof ( & arr2[ 0 ] + 1 ) ) ;
char * p = "abcdef" ;
printf ( "%d\n" , strlen ( p) ) ;
printf ( "%d\n" , strlen ( p + 1 ) ) ;
printf ( "%d\n" , strlen ( & p) ) ;
printf ( "%d\n" , strlen ( & p + 1 ) ) ;
printf ( "%d\n" , strlen ( & p[ 0 ] + 1 ) ) ;
printf ( "%d\n" , sizeof ( p) ) ;
printf ( "%d\n" , sizeof ( p + 1 ) ) ;
printf ( "%d\n" , sizeof ( * p) ) ;
printf ( "%d\n" , sizeof ( p[ 0 ] ) ) ;
printf ( "%d\n" , sizeof ( & p) ) ;
printf ( "%d\n" , sizeof ( & p + 1 ) ) ;
printf ( "%d\n" , sizeof ( & p[ 0 ] + 1 ) ) ;
int a[ 3 ] [ 4 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } ;
printf ( "%d\n" , sizeof ( a) ) ;
printf ( "%d\n" , sizeof ( a[ 0 ] [ 0 ] ) ) ;
printf ( "%d\n" , sizeof ( a[ 0 ] ) ) ;
printf ( "%d\n" , sizeof ( a[ 0 ] + 1 ) ) ;
printf ( "%d\n" , sizeof ( * ( a[ 0 ] + 1 ) ) ) ;
printf ( "%d\n" , sizeof ( a + 1 ) ) ;
printf ( "%d\n" , sizeof ( * ( a + 1 ) ) ) ;
printf ( "%d\n" , sizeof ( & a[ 0 ] + 1 ) ) ;
printf ( "%d\n" , sizeof ( * ( & a[ 0 ] + 1 ) ) ) ;
printf ( "%d\n" , sizeof ( * a) ) ;
printf ( "%d\n" , sizeof ( a[ 3 ] ) ) ;
printf ( "%d\n" , sizeof ( * a + 1 ) ) ;
int b = 5 ;
short s = 11 ;
printf ( "%d\n" , sizeof ( s = b + 2 ) ) ;
printf ( "%d\n" , s) ;
return 0 ;
}
2、指针笔试题
(1)练习1
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
int a[ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
int * ptr = ( int * ) ( & a + 1 ) ;
printf ( "%d,%d" , * ( a + 1 ) , * ( ptr - 1 ) ) ;
return 0 ;
}
(2)练习2
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
struct Test
{
int Num;
char * pcName;
short sDate;
char cha[ 2 ] ;
short sBa[ 4 ] ;
} * p;
int main ( )
{
p = ( struct Test * ) 0x100000 ;
printf ( "%p\n" , p + 0x1 ) ;
printf ( "%p\n" , ( unsigned long ) p + 0x1 ) ;
printf ( "%p\n" , ( unsigned int * ) p + 0x1 ) ;
return 0 ;
}
(3)练习3
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
int a[ 4 ] = { 1 , 2 , 3 , 4 } ;
int * ptr1 = ( int * ) ( & a + 1 ) ;
int * ptr2 = ( int * ) ( ( int ) a + 1 ) ;
printf ( "%x,%x" , ptr1[ - 1 ] , * ptr2) ;
return 0 ;
}
(4)练习4
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
int a[ 3 ] [ 2 ] = { ( 0 , 1 ) , ( 2 , 3 ) , ( 4 , 5 ) } ;
int * p;
p = a[ 0 ] ;
printf ( "%d" , p[ 0 ] ) ;
return 0 ;
}
(5)练习5
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
int a[ 5 ] [ 5 ] ;
int ( * p) [ 4 ] ;
p = a;
printf ( "%p,%d\n" , & p[ 4 ] [ 2 ] - & a[ 4 ] [ 2 ] , & p[ 4 ] [ 2 ] - & a[ 4 ] [ 2 ] ) ;
return 0 ;
}
(6)练习6
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
int aa[ 2 ] [ 5 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
int * ptr1 = ( int * ) ( & aa + 1 ) ;
int * ptr2 = ( int * ) ( * ( aa + 1 ) ) ;
printf ( "%d,%d" , * ( ptr1 - 1 ) , * ( ptr2 - 1 ) ) ;
return 0 ;
}
(7)练习7
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
char * a[ ] = { "work" , "at" , "alibaba" } ;
char * * pa = a;
pa++ ;
printf ( "%s\n" , * pa) ;
return 0 ;
}
(8)练习8
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
int main ( )
{
char * c[ ] = { "ENTER" , "NEW" , "POINT" , "FIRST" } ;
char * * cp[ ] = { c + 3 , c + 2 , c + 1 , c } ;
char * * * cpp = cp;
printf ( "%s\n" , * * ++ cpp) ;
printf ( "%s\n" , * -- * ++ cpp + 3 ) ;
printf ( "%s\n" , * cpp[ - 2 ] + 3 ) ;
printf ( "%s\n" , cpp[ - 1 ] [ - 1 ] + 1 ) ;
return 0 ;
}