栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《C++语言程序设计基础》学习之数组指针与字符串

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《C++语言程序设计基础》学习之数组指针与字符串

指针和数组是有很多关系的,函数的形参可以是指针,返回类型也可以是指针,申请内存空间可以使用new关键字,也可以使用free释放内存空间
用指针访问数组元素
数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组。

定义指向数组元素的指针
定义与赋值 例:int a[10], *pa; pa=&a[0]; 或 pa=a;    是等效的形式
经过上述定义及赋值后,(pa+1)的跨度是sizeof(int),  *pa就是a[0],*(pa+1)就是a[1],... ,*(pa+i)就是a[i]. a[i], *(pa+i), *(a+i), pa[i]都是等效的。
不能写 a++,因为a是数组首地址、是常量。
使用数组名和下标访问数组元素

#include

using namespace std;

int main() {

        int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

        for (int i = 0; i < 10; i++)

               cout << a[i] << "  ";

        cout << endl;

        return 0;

}

使用数组名和指针运算访问数组元素

#include

using namespace std;

int main() {

        int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

        for (int i = 0; i < 10; i++)

               cout << *(a+i) << "  "; /
for (int i = 0; i < 3; i++) a[i] = new int[3];

//矩阵的转置

void swap(int&a, int&b) {

        int temp = a;

        a = b;

        b = temp;

}

int main() {

        //指向指针的指针

        int **a;

        

        a = new int*[3];

        

        for (int i = 0; i < 3; i++)

               a[i] = new int[3];

        //int (*a)[3] = new int[3][3];

        cout << "输入9个整数作为矩阵元素值" << endl;

        for (int i = 0; i < 3; i++)

               for (int j = 0; j < 3; j++)

                       cin >> a[i][j];

        cout << "初始矩阵:" << endl;

        for (int i = 0; i < 3; i++) {

               for (int j = 0; j < 3; j++)

                       cout << a[i][j] << ' ';

               cout << endl;

        }

        for (int i = 0; i < 3; i++)

               for (int j = 0; j < i; j++)

                       swap(a[i][j], a[j][i]);

        cout << "转置后的矩阵:" << endl;

        for (int i = 0; i < 3; i++) {

               for (int j = 0; j < 3; j++)

                       cout << a[i][j] << ' ';

               cout << endl;

        }

        return 0;

}



int main(){

        int(*cp)[9][8] = new int[7][9][8];

        for (int i = 0; i < 7; i++)

               for (int j = 0; j < 9; j++)

                       for (int k = 0; k < 8; k++)

                               *(*(*(cp + i) + j) + k) = (i * 100 + j * 10 + k);

        for (int i = 0; i < 7; i++) {

               for (int j = 0; j < 9; j++) {

                       for (int k = 0; k < 8; k++)

                               cout << cp[i][j][k] << " ";

                       cout << endl;

                       }

               cout << endl;

        }

        delete[] cp;

        return 0;

}

申请和释放动态数组示例:

class Point {

public:

        Point() :x(0), y(0) { cout << "Default Constructor called." << endl; }

        Point(int x, int y) :x(x), y(y) { cout << "Constructor called." << endl; }

        ~Point() { cout << "Destructor called." << endl; }

        int getX()const { return x; }//常函数成员处理常对象

        int getY()const { return y; }

        void move(int newX, int newY) {

               x = newX;

               y = newY;

        }

private:

        int x, y;

};

class ArrayOfPoints { //动态数组类

public:

        ArrayOfPoints(int size) :size(size) { points = new Point[size]; }

        ~ArrayOfPoints(){

               cout << "Deleting..." << endl;

        }

        Point& element(int index) {   //返回数组元素的引用

               assert(index >= 0 && index < size);

               return points[index];

        }

private:

        Point *points;//指向动态数组首地址

        int size; //数组大小

};

int main(){

        int count;

        cout << "Please enter the count of points:";

        cin >> count;

        ArrayOfPoints points(count);//创建数组对象

        //points.element(0)调用类函数,返回对象数组中的元素的引用,访问数组元素的成员

        points.element(0).move(5, 0);

        points.element(1).move(15, 20);//访问数组元素的成员

        return 0;

}

vector动态数组对象:封装任何类型的动态数组,自动创建和删除。数组下标越界检查。
使用:vector<元素类型> 数组对象名(数组长度); vector arr(5) //建立大小为5的int数组
对数组元素的引用,与普通数组具有相同形式:vector对象名 [ 下标表达式 ]
vector数组对象名不表示数组首地址,获得数组长度,用size函数,数组对象名.size()

#include

using namespace std;

double average(const vector &arr) {//参数为vector常类型

        double sum = 0;

        for (unsigned i = 0; i < arr.size(); i++)

               sum += arr[i];

        return sum / arr.size();

}

int main(){

        unsigned n;

        cout << "n = ";

        cin >> n;

        vectorarr(n);//创建数组对象

        cout << "Please input " << n << " real numbers:" << endl;

        for (unsigned i = 0; i < n; i++)

               cin >> arr[i];

        cout << "Average = " << average(arr) << endl;

        return 0;

}

 基于范围的for循环配合auto举例:

vector v = { 1,2,3 };

for (auto i = v.begin(); i != v.end(); ++i) //基于范围的for循环配合auto举例

        cout << *i << endl;

for (auto e : v)

        cout << e << endl;

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号