C语言学习:数组和指针

今天学习了指针章节的数组部分,一开始觉得指针和组数组没啥必然的联系,通过书中的例子,了解了一些,通过例子学习:

例一:一维数组测试: 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;

/* 查看数组 mult 的值和地址 */
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
/*Program:muti_array.c*/

#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]);

/*List all elements of the array 注意: *board 为数组的第一个元素的地址,board 为数组第一个元素的值*/
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) 获得数组所有元素的值。

总结

数组和指针的关系比较复杂,暂时也总结这些,以后再补上。

附:访问数组元素的指针表达式

C语言学习:数组和指针

原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/237942.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论