int a = 98 ;
int * p = & a;
p
:表示指针变量名,存放的是地址;*p
:取指针变量指向的内存空间的数据;p+1
:向后偏移一个int类型
大小的空间;*(p+1)
:取p+1指向
的内存空间的数据;一维数组名的含义:
int array[ 5 ] = { 11 , 22 , 33 , 44 , 55 } ;
array
:表示数组的名字,同时也是数组的首地址
;array[1]
:取数组第一个元素
的值
(特别注意:
数组的下标是从0开始
的),等价于*(array+1)
;&array[1]
:取数组第一个元素
的地址
,等价于array+1
;两者的区别: 可以通过一级指针指向一维数组,比如:在给函数传递一个数组时,可以使用一级指针指向一个一维数组; 一级指针变量名不完全等价于
一维数组名; 一级指针变量名是一个变量
,可以被修改; 一维数组名字是一个常量
,不可以被修改; 代码如下:
# include <stdio.h> void print_array ( int a[ ] , int len) { for ( int i = 0 ; i < 5 ; i++ ) { printf ( "*(a + %d) = %d\n" , i, * ( a + i) ) ; } putchar ( '\n' ) ; } void show_array ( int * q, int len) { for ( int j = 0 ; j < 5 ; j++ ) { printf ( "q[%d] = %d\n" , j, q[ j] ) ; } putchar ( '\n' ) ; } int main ( int argc, const char * argv[ ] )
{ int array[ 5 ] = { 11 , 22 , 33 , 44 , 55 } ; int * p = array; for ( int i = 0 ; i < 5 ; i++ ) { printf ( "*(p + %d) = %d\n" , i, * ( p+ i) ) ; } putchar ( '\n' ) ; printf ( "array = %p\n" , array) ; printf ( "p = %p\n" , p) ; putchar ( '\n' ) ; printf ( "array + 4 = %p\n" , array + 4 ) ; printf ( "p + 4 = %p\n" , p + 4 ) ; putchar ( '\n' ) ; printf ( "*(array + 3) = %d\n" , * ( array + 3 ) ) ; printf ( "*(p + 3) = %d\n" , * ( p + 3 ) ) ; printf ( "array[3] = %d\n" , array[ 3 ] ) ; putchar ( '\n' ) ; for ( int i = 0 ; i < 5 ; i++ ) { printf ( "array[%d] = %d\n" , i, array[ i] ) ; } putchar ( '\n' ) ; print_array ( p, 5 ) ; show_array ( array, 5 ) ; for ( int i = 0 ; i < 5 ; i++ ) { printf ( "%d\n" , * ( p++ ) ) ; } putchar ( '\n' ) ; for ( int i = 0 ; i < 5 ; i++ ) { printf ( "*(p + %d) = %d\n" , i, * ( p+ i) ) ; } putchar ( '\n' ) ; for ( int i = 0 ; i < 5 ; i++ ) { printf ( "%d\n" , * ( -- p) ) ; } return 0 ;
}
* ( p + 0 ) = 11
* ( p + 1 ) = 22
* ( p + 2 ) = 33
* ( p + 3 ) = 44
* ( p + 4 ) = 55 array = 0x7fffe3fadfb0
p = 0x7fffe3fadfb0 array + 4 = 0x7fffe3fadfc0
p + 4 = 0x7fffe3fadfc0 * ( array + 3 ) = 44
* ( p + 3 ) = 44
array[ 3 ] = 44 array[ 0 ] = 11
array[ 1 ] = 22
array[ 2 ] = 33
array[ 3 ] = 44
array[ 4 ] = 55 * ( a + 0 ) = 11
* ( a + 1 ) = 22
* ( a + 2 ) = 33
* ( a + 3 ) = 44
* ( a + 4 ) = 55 q[ 0 ] = 11
q[ 1 ] = 22
q[ 2 ] = 33
q[ 3 ] = 44
q[ 4 ] = 55 11
22
33
44
55 * ( p + 0 ) = 32767
* ( p + 1 ) = 847337984
* ( p + 2 ) = 1376258227
* ( p + 3 ) = 1273121360
* ( p + 4 ) = 21986 55
44
33
22
11