c/c++

C/C++的指针与数组

2020-09-02  本文已影响0人  程序员丶星霖

一、指针

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

个人博客:http://www.coderlearning.cn/

我的微信公众号.jpg
上一篇下一篇

猜你喜欢

热点阅读