【c++】数组与指针

基本概念

指针是c/c++中一个非常重要的概念。如果在程序中定义了一个变量,在对程序进行编译时,系统会给这个变量分配内存单元。编译系统会根据程序中定义的变量类型分配一定长度的空间。例如,c++ 为整形变量分配4个字节,为字符型变量分配1个字节。内存区的每个字节都有编号,就是地址
通过地址能够找到所需的变量单元,因此包地址形象化的称为指针
如果一个变量专门用来存放另一个变量的地址,则它称为指针变量,指针变量的值是地址(即指针)。
指针是一个地址,指针变量时存放地址的变量。

实例演示

指针变量的声明与赋值
#include <iostream>
#include <string.h>

int* p; // 声明一个指针变量
int var = 10;
p = &var; // 将变量的地址赋值给指针
*p = 100; // 通过变量var的地址来修改var的元素
std::cout << "var = " << var << std::endl;

输出结果
var = 100

数组

数组是一组有序数据的集合,数组的每一个元素都属于同一个数据类型。一维数组是数组中最简单的,它的元素只需要用数组名家一个下标就能唯一的确定。

int arr[10]; //声明一个数组
// 为数组元素赋值
for (int i = 0;i<10;i++)
{
	arr[i] = i;
}

数组名arr本质代表第一个元素的地址,所以访问数组arr中的第1个元素有两种方式。

std::cout << *arr << std::endl;
std::cout << arr[0] << std::endl;

输出结果
0
0
声明一个数组本质上是在一个地址上申请指定大小的内存,以下的两种操作本质上是一样的。

// 方式1
int arr[10]; 
for (int i=0;i<10;i++)
{
    arr[i]=1;
}
// 方式2
int arr2 = (int*)malloc(sizeof(int)*10);
for (int i=0;i<10;i++)
{
    arr2[i]=i;
}
std::cout << arr[1] << std::endl;
std::cout << arr2[2] << std::endl;

通过memcpy方式

int arr[10]; 
for (int i=0;i<10;i++)
{
    arr[i]=i;
}
int* arr2 = (int*)malloc(sizeof(int)*10);
memcpy(arr2,arr,sizeof(int)*10);
std::cout << "arr2[9] = " <<arr4[9] << std::endl;

输出结果
arr2[9] = 9

直接往某个地址里复制数组

int arr[10]; 
for (int i=0;i<10;i++)
{
    arr[i]=i;
}
int* p;
int var = 10;
p = &var; // 指针变量必须先拿到地址,否则就是空指针,不能做任何操作
memcpy(p,arr,sizeof(int)*10);
std::cout << "*p = " <<*p << std::endl;
std::cout << "p[9] = " <<p[9] << std::endl;

输出结果:
*p = 0
p[9] = 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值