C++记录(5)
半城夏味 程序员就应该安静的边听纯音变打代码。23333
数组和指针
这个真的好重要,我学了好久,到后面也要慢慢翻笔记重新看。
之前给大家讲解了每个变量都有地址,平时如果我们定义了一个变量之后可以用指针保存其地址,比如
int a = 1;
int* pa = &a;
如果是数组的话,因为数组也是变量,在数组中的每一个元素也是有自己的地址的,如果要用循环的方式来给数组中的每一个元素定义一个指针的话,这未免太麻烦,
int num[100] = {0};
int* p_num[100] = {0};
for(int idx = 0; idx < 100; ++idx)
{
p_num[idx] = &num[idx];
}
其实在C++的前辈中早就意识到这个问题存在,已经给出了解决方案,那就是 数组名字就是数组的首地址
①、为了避免上面说的情况,C/C++中规定数组名字就是数组的首地址。注意,是数组的首地址,也就是数组的第0个元素的地址,即:int num[100] = {0};int* pnum = &num[0];这里的 num 和 pnum 的值应该是一样的,
②、C/C++中规定如果指针变量p已经指向数组中的一个元素,则p+1指向同一数组中的下一个元素的地址(而不是将p的值简单+1),p-1同理。int num[100] = {0};int* pnum_0 = &num[0];int* pnum_1 = &num[1];pnum_0 += 1;执行以上代码之后,这里面pnum_0的值应该和pnum_1的值是相等的。
③、所以,根据以上,针对一个数组我们只需要用数组的名字就可以得到数组中的任何一个数组元素的地址了,很方便吧?int num[100] = {0};
我们可以再定义一个指针,如下
int num[100] = {0};
int* pnum = num;
这里的 pnum 是可以移动的,所以就可以指向数组num中的任意一个元素喽!例如遍历一个数组:
int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int* pnum = num;
for(int idx = 0; idx < 10; ++idx)
{
cout << *(pnum+idx) << endl;
}
5、小作业:
输入一个字符串,例如:a123x456__17960?302ab5876将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数。
(很多都是搬运,因为syc讲的太好了,我也是他的 学生之一,作业是自己写的程序)