C/C++教程

【c++】数组与指针

本文主要是介绍【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

这篇关于【c++】数组与指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!