一、指针
1.1、指针与地址
示例:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 15;
// 定义两个指针
int *a_ = &a;
int *b_ = &b;
cout << a_ << endl;
cout << b_ << endl;
return 0;
}
输出结果:
0x7ffee4ef8848
0x7ffee4ef8844
通过指针修改变量的值:
示例:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 15;
int *a_ = &a;
int *b_ = &b;
++*a_;
cout << a << endl;
return 0;
}
输出结果:
11
如果指针暂时没有所指定的变量,可以将其指定为NULL。
1.2、 指针与函数参数
示例:
#include <iostream>
using namespace std;
void f(int a){
a = 10;
}
int main() {
int a = 0;
f(a);
cout << a << endl;
return 0;
}
输出结果:
0
上述示例,在C++环境下可以将f()函数中的参数a指定为引用类型的参数&a,在纯C环境下,可以使用指针型变量。
示例如下:
#include <iostream>
using namespace std;
void f(int *a){
*a = 10;
}
int main() {
int a = 0;
f(&a);
cout << a << endl;
return 0;
}
输出结果:
10
二、 数组
2.1、输出的初始化
示例:
#include <iostream>
using namespace std;
int main() {
int a[10] = {0};
for (int i = 0;i<10;i++)
cout << a[i] << " ";
cout << endl;
int b[10] = {1};
for (int i = 0;i<10;i++)
cout << b[i] << " ";
cout << endl;
int c[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i = 0; i<10;i++)
cout << c[i] << " ";
cout << endl;
return 0;
}
输出结果:
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9 10
2.2、int型数组
示例:
#include <iostream>
using namespace std;
int main() {
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = a; // 将a的第一个元素的地址指向指针p
for(int i = 0; i<10;i++)
cout << *(p+i) << " "; // 根据指针取出变量值
cout << endl;
return 0;
}
输出结果:
1 2 3 4 5 6 7 8 9 10
2.3、字符型数组
字符型数组。
char s1[] = "I am a String"; // 将"I am a String"赋值给数组s1
char *s = "I am a String"; // 将"I am a String"第一个元素的地址复制给字符型指针s
2.4、指针型数组
示例:
#include <iostream>
using namespace std;
int main() {
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p[10] = {a,a+1,a+2,a+3,a+4,a+5,a+6,a+7,a+8,a+9}; // 存放了10个指针
for(int i = 0; i<10;i++)
cout << *p[i] << " "; // 取出指针型数组p的元素地址所指向的变量
cout << endl;
return 0;
}
输出如下:
1 2 3 4 5 6 7 8 9 10
示例2:
#include <iostream>
using namespace std;
void arrayFun(int a[],int b){
for (int i = 0; i< b;i++)
++a[i];
for (int i = 0;i<b;i++)
cout << a[i] << " ";
cout << endl;
}
int main() {
int a[10] = {1,2,3,4,5,6,7,8,9,10};
arrayFun(a,10);
return 0;
}
输出结果:
2 3 4 5 6 7 8 9 10 11
将上述示例的a[]变成*a。
#include <iostream>
using namespace std;
void arrayFun(int *a,int b){
for (int i = 0; i< b;i++)
++a[i];
for (int i = 0;i<b;i++)
cout << a[i] << " ";
cout << endl;
}
int main() {
int a[10] = {1,2,3,4,5,6,7,8,9,10};
arrayFun(a,10);
return 0;
}
输出结果:
2 3 4 5 6 7 8 9 10 11
两个示例输出的结果是一样的,都是对a[10]数组的各个元素进行了自增操作。
2.5、 二维数组
二维数组的初始化:
示例:
#include <iostream>
using namespace std;
int main() {
int a[4][3] = {
{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}
};
for (int i = 0;i<4;i++)
{
for (int j = 0;j<3;j++)
cout << a[i][j] << "\t";
cout << endl;
}
return 0;
}
输出结果:
1 2 3
4 5 6
7 8 9
10 11 12
二维字符型数组:
示例:
#include <iostream>
using namespace std;
void arraySD(char *s2D[])
{
for (int i = 0;i<4;i++)
cout << s2D[i] << endl;
}
int main() {
char *s2D[] = {
"I",
"am",
"a",
"String"
};
arraySD(s2D);
return 0;
}
输出结果:
I
am
a
String
2.6、 指向函数的指针
示例:
#include <iostream>
using namespace std;
int add(int a, int b)
{
return a+b;
}
int minu(int a, int b)
{
return a-b;
}
int main() {
int (*p)(int,int );
char op = '+';
if (op == '+')
p = add;
else
p = minu;
cout << p(3,4) << endl;
return 0;
}
输出结果:
7
示例2:
#include <iostream>
using namespace std;
int add(int a, int b)
{
return a+b;
}
int minu(int a, int b)
{
return a-b;
}
int main() {
int (*p)(int,int );
char op = '-';
if (op == '+')
p = add;
else
p = minu;
cout << p(3,4) << endl;
return 0;
}
输出结果:
-1
我的微信公众号.jpg
网友评论