浅析C语言中指针与数组
最近几天忙着准备复试,就开始学习C语言(以前本科阶段就从C++学起,对C了解不深入)
复习几天就看到了指针和数组又开始头痛了(学C++的时候就没有深入了解),不过发现看多了也就觉得还是那么回事。
个人通过学习总结如下
1.数组就是相当于把类型相同的东西归为一类并进行编号。数组名保存的是该数组第一个元素的地址
譬如我们学校教室就有三个类型(分为小、中、大三类),假设各位10个(当然实际比这个多很多),则
我们可以将其定义为数组 short A[10](小教室),int B[10](中教室), long C[10](大教室);
假设小教室的编号分别为01101(一教一楼的第一个教室),01102,...,01110;
中教室的编号分别为02101(二教一楼的第一个教室),02102,...,02110;
大教室的编号分别为03101(三教一楼的第一个教室),03102,...,03110;
则A存放的地址信息即为01101,B、C则对应地址02101、03101
即&A[0] = 01101,&A[1] = 01102,...,&A[9] = 01110;
即&B[0] = 02101,&B[1] = 02102,...,&B[9] = 02110;
即&C[0] = 03101,&C[1] = 03102,...,&C[9] = 03110;
但到此每个变量用于存放的值我们却不知道,假如我们用每个教室容纳上课的人数来表示存放的值,
我们可以假设 A[0] = 60,A[1] = 60,...,A[9] = 60;
B[0] = 120,B[1] = 120,...,B[9] = 120;
C[0] = 200,C[1] = 200,...,C[9] = 200;
这样我们就可以通过地址知道每个教室可以容纳的人数了,
即*&A[0] = 60,*&A[1] = 60,...,*&A[9] = 60;
即*&B[0] = 120,*&B[1] = 120,...,*&B[9] = 120;
即*&C[0] = 200,*&C[1] = 200,...,*&C[9] = 200;
注意: 当这里的地址已经分配之后就不可以更改!
2.指针就相当于保存地址的信息,对于各类型的教室,我们就可以定义如下
short *a; int *b; int *c;
a = A; b = B; c = C;
则此时a = &A[0] = 01101, b = &B[0] = 02101, c = &C[0] = 03101;
*a = A[0] = 60, *b = B[0] = 120, *c = C[0] = 200;
如何此时 a++; 则a = &A[1] = 01102; *a = A[1] = 60;
注意: 指针存储的地址信息是可以改变的!
以上则是本人近期学习指针和数组的总结,如有什么错误和不足之处,还希望各位博主指出和探讨。
如需转载,请注明,谢谢。
最近几天忙着准备复试,就开始学习C语言(以前本科阶段就从C++学起,对C了解不深入)
复习几天就看到了指针和数组又开始头痛了(学C++的时候就没有深入了解),不过发现看多了也就觉得还是那么回事。
个人通过学习总结如下
1.数组就是相当于把类型相同的东西归为一类并进行编号。数组名保存的是该数组第一个元素的地址
譬如我们学校教室就有三个类型(分为小、中、大三类),假设各位10个(当然实际比这个多很多),则
我们可以将其定义为数组 short A[10](小教室),int B[10](中教室), long C[10](大教室);
假设小教室的编号分别为01101(一教一楼的第一个教室),01102,...,01110;
中教室的编号分别为02101(二教一楼的第一个教室),02102,...,02110;
大教室的编号分别为03101(三教一楼的第一个教室),03102,...,03110;
则A存放的地址信息即为01101,B、C则对应地址02101、03101
即&A[0] = 01101,&A[1] = 01102,...,&A[9] = 01110;
即&B[0] = 02101,&B[1] = 02102,...,&B[9] = 02110;
即&C[0] = 03101,&C[1] = 03102,...,&C[9] = 03110;
但到此每个变量用于存放的值我们却不知道,假如我们用每个教室容纳上课的人数来表示存放的值,
我们可以假设 A[0] = 60,A[1] = 60,...,A[9] = 60;
B[0] = 120,B[1] = 120,...,B[9] = 120;
C[0] = 200,C[1] = 200,...,C[9] = 200;
这样我们就可以通过地址知道每个教室可以容纳的人数了,
即*&A[0] = 60,*&A[1] = 60,...,*&A[9] = 60;
即*&B[0] = 120,*&B[1] = 120,...,*&B[9] = 120;
即*&C[0] = 200,*&C[1] = 200,...,*&C[9] = 200;
注意: 当这里的地址已经分配之后就不可以更改!
2.指针就相当于保存地址的信息,对于各类型的教室,我们就可以定义如下
short *a; int *b; int *c;
a = A; b = B; c = C;
则此时a = &A[0] = 01101, b = &B[0] = 02101, c = &C[0] = 03101;
*a = A[0] = 60, *b = B[0] = 120, *c = C[0] = 200;
如何此时 a++; 则a = &A[1] = 01102; *a = A[1] = 60;
注意: 指针存储的地址信息是可以改变的!
以上则是本人近期学习指针和数组的总结,如有什么错误和不足之处,还希望各位博主指出和探讨。
如需转载,请注明,谢谢。