数组与指针:(Important)
- 数组元素的地址:(如何使用指针来存储数组元素的地址呢?)
int num[100] = { 0}; int* p_num[100] = { 0}; for(int idx = 0; idx < 100; ++idx) { p_num[idx] = &num[idx]; }
讯享网这样的操作没有任何语法或者逻辑错误,但是我们Duck不必如此麻烦。
- 数组名就是数组首地址:
①为了避免上面说的情况,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* pnum = num; //(定义一个新指针pnum,自由指向(存储)地址)这里的 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; }④访问数组的两种方法:
下标法:num[0];
指针法:*(pnum+idx) - 练习:
- 定义两个字符数组输入如下:
char str1[50] = {0}, str2[] = “I Love C++!”;
用指针的方式,实现将 str2 拷贝到 str1 中。讯享网
#include<iostream> using namespace std; void arycp(char* str1 ,char* str2) { for(;*str2 != 0;) { *str1++ = *str2++; } } int main() { char str1[50] = { 0} ,str2[] = "I Love C++!"; arycp(str1 ,str2); return 0; } - 输入一个字符串,例如:
a123x456__17960?302ab5876
将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数#include<iostream> using namespace std; //未写完 void find_num(int* ary_num ,char* ary_str) { while(*ary_str != 0) { if(48 <= *ary_str && *ary_str<57) { cout << "ary_atr = "<< *ary_str <<endl; *ary_num++ = (*ary_str-'0'); } ary_str++; } } int main() { int ary_num[50] = { 0}; char* ary_str = "a123x456__17960?302ab5876"; find_num(ary_num ,ary_str); for(int i=0;i<50;i++) cout << ary_num[i] <<endl; return 0; }
- 定义两个字符数组输入如下:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27938.html