1. 指针本质(重点)
取地址操作符为& ,也称引用 ,通过该操作符可以获取一个变量的地址值 取值操作符是 *,也成解引用 ,通过该操作符可以得到一个地址对应的数据 指针是为了保存地址 ,应用是偏移和传递 &符号是取地址,指针变量的初始化一定是某个变量取地址
# include <stdio.h>
int main ( )
{
int i = 5 ;
int * i_pointer = & i;
printf ( "i = %d\n" , i) ;
printf ( "*p = %d\n" , * i_pointer) ;
return 0 ;
}
2. 指针传递使用(重点)
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
void change ( int * j)
{
* j = 5 ;
}
int main ( )
{
int i = 10 ;
printf ( "before change i = %d\n" , i) ;
change ( & i) ;
printf ( "after change i = %d\n" , i) ;
return 0 ;
}
3. 指针偏移使用(重点)
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int a[ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
int * p;
p = a;
printf ( "*p = %d\n" , * p) ;
for ( int i = 0 ; i < 5 ; i++ )
{
printf ( "%d\n" , * ( p + i) ) ;
}
return 0 ;
}
4. 指针自增自减(重点)
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int a[ 3 ] = { 2 , 7 , 9 } ;
int * p;
int j;
p = a;
j = * p++ ;
printf ( "a[0] = %d,j = %d,*p = %d\n" , a[ 0 ] , j, * p) ;
j = p[ 0 ] ++ ;
printf ( "a[0] = %d,j = %d,*p = %d\n" , a[ 0 ] , j, * p) ;
return 0 ;
}
5. 指针与一维数组(重点)
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
void change ( char * d)
{
* d = 'H' ;
* ( d + 1 ) = 'E' ;
d[ 2 ] = 'L' ;
}
int main ( )
{
char c[ 10 ] = "hello" ;
change ( c) ;
puts ( c) ;
return 0 ;
}
6. 指针与动态内存申请(重点)
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int i;
scanf ( "%d" , & i) ;
char * p;
p = ( char * ) malloc ( i) ;
strcpy ( p, "malloc success" ) ;
puts ( p) ;
free ( p) ;
p = NULL ;
return 0 ;
}
7. 栈空间与堆空间的差异(难点)
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
char * print_stack ( )
{
char c[ 17 ] = "I am print_stack" ;
puts ( c) ;
return c;
}
char * print_malloc ( )
{
char * p = ( char * ) malloc ( 30 ) ;
strcpy ( p, "I am print_malloc" ) ;
puts ( p) ;
return p;
}
8. 字符指针与字符数组的初始化
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
char * p = "hello" ;
char c[ 10 ] = "hello" ;
c[ 0 ] = 'H' ;
printf ( "c[0]=%c\n" , c[ 0 ] ) ;
printf ( "p[0]=%c\n" , p[ 0 ] ) ;
p = "world" ;
puts ( p) ;
return 0 ;
}
9. 二级指针偏移
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
# include <stdlib.h>
void change ( int * * p, int * pj)
{
* p = pj;
}
int main ( )
{
int i = 10 ;
int j = 5 ;
int * pi;
int * pj;
pi = & i;
pj = & j;
printf ( "i = %d,*pi = %d,*pj = %d\n" , i, * pi, * pj) ;
change ( & pi, pj) ;
printf ( "after change i=%d,*pi=%d,*pj=%d\n" , i, * pi, * pj) ;
return 0 ;
}
10. Day7 作业1
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int n;
scanf ( "%d" , & n) ;
int i = 1 ;
int total = 1 ;
for ( i = 1 ; i <= n; i++ )
{
total = total * i;
}
printf ( "%d\n" , total) ;
return 0 ;
}
11. Day7 作业2
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int num_10, num_5, num_2, num_1, a = 0 ;
for ( num_10 = 1 ; num_10 <= 9 ; num_10++ )
{
for ( num_5 = 1 ; num_5 <= 19 ; num_5++ )
{
for ( num_2 = 1 ; num_2 <= 37 ; num_2++ )
{
for ( num_1 = 1 ; num_1 <= 40 ; num_1++ )
{
if ( num_1 * 1 + num_2 * 2 + num_5 * 5 + num_10 * 10 == 100 && num_1 + num_2 + num_5 + num_10 == 40 )
{
a++ ;
}
}
}
}
}
printf ( "%d\n" , a) ;
return 0 ;
}
12. Day8 作业
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int n;
int i;
scanf ( "%d" , & n) ;
int arr[ 100 ] ;
for ( i = 0 ; i < n; i++ )
{
scanf ( "%d" , & arr[ i] ) ;
}
int count = 0 ;
for ( i = 0 ; i < n; i++ )
{
if ( arr[ i] == 2 )
{
count++ ;
}
}
printf ( "%d\n" , count) ;
return 0 ;
}
13. Day9 作业
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
# include <string.h>
int main ( )
{
char c[ 100 ] , d[ 100 ] ;
gets ( c) ;
int i, j;
for ( i = strlen ( c) - 1 , j = 0 ; i >= 0 ; i-- , j++ )
{
d[ j] = c[ i] ;
}
d[ j] = '\0' ;
int result = strcmp ( c, d) ;
if ( result < 0 )
{
printf ( "%d\n" , - 1 ) ;
}
else if ( result > 0 )
{
printf ( "%d\n" , 1 ) ;
}
else
{
printf ( "%d\n" , 0 ) ;
}
return 0 ;
}
14. Day11 作业
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main ( )
{
int i;
scanf ( "%d" , & i) ;
char * p;
p = ( char * ) malloc ( i) ;
char c;
scanf ( "%c" , & c) ;
gets ( p) ;
puts ( p) ;
return 0 ;
}