美文网首页c/c++
C/C++的指针与数组

C/C++的指针与数组

作者: 程序员丶星霖 | 来源:发表于2020-09-02 16:48 被阅读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

    相关文章

      网友评论

        本文标题:C/C++的指针与数组

        本文链接:https://www.haomeiwen.com/subject/moywsktx.html