今天学习了指针章节的数组部分,一开始觉得指针和组数组没啥必然的联系,通过书中的例子,了解了一些,通过例子学习:
例一:一维数组测试: array_point.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <stdio.h> int main(void) { long mult[]={15L,25L,35L,45L}; long *p=mult; int i=0;
printf("nmult= %ld", *mult ); printf("nmult= %d", mult );
for ( i=0;i<4;i++) { printf("nmult[%d]=%d", i, mult[i] ); printf("naddress p+%d (&muti[%d]): %d ", i,i,p+i); } printf("n"); return 0; }
|
1.1 编译执行
1 2 3 4 5 6 7 8 9 10 11 12
|
[pg92@redhatB point]$ gcc -o array_point array_point.c [pg92@redhatB point]$ ./array_point mult= 15 mult= -1077617976 mult[0]=15 address p+0 (&muti[0]): -1077617976 mult[1]=25 address p+1 (&muti[1]): -1077617972 mult[2]=35 address p+2 (&muti[2]): -1077617968 mult[3]=45 address p+3 (&muti[3]): -1077617964
|
备注:可见数组 mult 表示第一个数组元素的地址。 *mult 表示第一个数组元素的值。
例二:二维数组:muti_array.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
#include <stdio.h> int main(void) { char board[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}}; int i=0; printf("n values of board[0][0]: %c",board[0][0]); printf("n values of board[0]: %p",board[0]); printf("n values of *board[0]: %c",*board[0]); printf("n values of *board: %p",*board); printf("n values of board: %c",board); printf("n values of *board[0]: %c",*board[0]); printf("n values of *board[1]: %c",*board[1]); printf("n values of *board[2]: %c",*board[2]); for(i=0;i<9;i++) { printf("nboard: %p",*board+i); printf("nboard: %c",*(*board+i)); } printf("n"); return 0; }
|
2.1 编译执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
values of board[0][0]: 1 values of board[0]: 0xbfa14103 values of *board[0]: 1 values of *board: 0xbfa14103 values of board: 1 values of *board[0]: 1 values of *board[1]: 4 values of *board[2]: 7 board: 0xbfa14103 board: 1 board: 0xbfa14104 board: 2 board: 0xbfa14105 board: 3 board: 0xbfa14106 board: 4 board: 0xbfa14107 board: 5 board: 0xbfa14108 board: 6 board: 0xbfa14109 board: 7 board: 0xbfa1410a board: 8 board: 0xbfa1410b board: 9
|
备注:这个例子引用的是二维数组并打印一系列的值,用于理解各变量的意义。
board[0][0]:表示直接引用第一个数组的第一个元素值。
board[0]: 表示二维数组第一个数组的起始地址。
board[0]: 指明了第一个数组,但没指明哪个元素,省略元素是指引用第一个元素。
board: 表示二维数组第一个数组的第一个元素地址。
board: 表示二维数组第一个数组的第一个元素值。
board[i]: 表示二唯数组第 i 个数组第一个元素的值。
board+i: 获得数组所有元素的地址。
(*board+i) 获得数组所有元素的值。
总结
数组和指针的关系比较复杂,暂时也总结这些,以后再补上。
附:访问数组元素的指针表达式
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/237942.html