数组_指针_字符串
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()
以上是关于数组_指针_字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用 std::thread 函数 C++11 将指针作为参数传递