数组_指针_字符串

Posted huanxifan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组_指针_字符串相关的知识,希望对你有一定的参考价值。

数组-指针-字符串

数组

数组的定义与初始化

  • 类型符 数组名[常量表达式];
  • 数组必须先定义,再使用
  • 数组名字是数组首元素的内存地址,是一个常量,不能被赋值
  • 数组可以作为函数的参数:形参会影响实参,一般数组长度也要作为参数传入
  • 对象数组
int a[10];  //定义整形一维数组
int a[2][5];  //定义整形二维数组
Point a[2];  //定义Point类对象数组

int a[10]={0,1,2,3};  //初始化
int a[]={0,1,2};    //编译器根据初始化的元素确定数组大小
Point a[2] = {Point(1,2), Point(3,4)};  //初始化

int a[2][2]={{1},{3,4}};  //二维初始化

//作为函数的参数 
#include <iostream>
using namespace std;

void add(int a[], int b[], int len_a, int len_b){
    for(int i=0;i<len_a;i++){
        a[i] = a[i] + b[i];
    }
}

int main(){
    int a[3] = {1,2,3};
    int b[3] = {4,5,6};
    add(a, b, 3, 3);
    for(int i=0; i<3;i++){
        cout << a[i] << endl;
    }
    return 0;
}

基于范围的for循环

int main(){
    int a[3] = {1,2,3};
    int *p;
    for(p = a; p < a + sizeof(a)/sizeof(int);p++){
        cout << *p << endl;
    }
    return 0;
}

int main(){
    int a[3] = {1,2,3};
    for(int & e:a){  //遍历容器,需要C++11标准
        cout << e << endl;
    }
    return 0;
}

vector

vector<int> arr(5);  //建立大小为5的int数组
arr.size();   //返回元素个数
arr[0];

add(vector<int> &v1, vector<int> &v2);

指针

指针的定义

  • 本质为内存地址,间接访问存储单元
  • 指针运算符 * 和 地址运算符 &
  • *指向常量的指针 const int p = &a 不可以通过指针改变所指的对象
  • 指针类型的常量 int * const p2 = &a p2的值不能更改,p2不能再指向别的对象
  • 指针运算
int i=0, j=1;
int *p = &i;  //指针p指向i
int *p; p = &i; //指针p指向i
int *p = nullptr; //定义空指针,int *p = 0
int void *p;   //可以被赋予任何类型对象的地址;只能用于存放地址,不能通过它访问对象的值(可以先强制转换再访问)

*p = 3;  //通过指针间接更改i

int *p2 = &b;
p = p2;   //指针赋值

p = p + 1;  //指针向后方移动一个数据的大小,即指向下一个数据

指针与数组

int a[10];
int *p;
pa=&a[0]; pa = a;  //指针指向数组
//*p=a[0]    *(pa+1)=a[1]

指针数组

  • 数组的元素为指针类型
int line1[] = {1,0,0};
int line2[] = {0,1,0};
int line3[] = {0,0,1};
int *p[3] = {line1, line2, line3}

指针与函数

  • 指针作为函数的参数:双向传递, 数组太大
  • 指针类型的函数 int* add(int, int)

动态分配

动态内存分配

int *p = new int[10];
delete[] p;

int *p = new Point(1,2);
delete p;

字符串

C风格字符串

char str[8] = "hello";   //以为结尾
char str[] = "hello";

string

#include <string>
string s = "hello";
s[0] = ‘H‘;

s1+s2; // 字符串拼接

s.length()

以上是关于数组_指针_字符串的主要内容,如果未能解决你的问题,请参考以下文章

C程序设计实验报告七

C语言总结_数组与函数传参练习题

C语言总结_数组与函数传参练习题

使用 std::thread 函数 C++11 将指针作为参数传递

C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)

C语言--指针2