#include <iostream>
using namespace std;
void printNumber(int *A,int n)
{
for(int i=0; i<n; i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
}
void print(int A[][3], int n)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<3; j++)
{
cout<<A[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
int A[3];
//返回12,A所占的字节数:一个int型4个字节,3X4=12
cout<<sizeof(A)<<endl;
//给定地址后的连续的内存,逐个字节初始化为参数中指出的值,故第三个参数为总的字节数
memset(A,-1,sizeof(A));
printNumber(A,3);
//动态定义数组,动态一维数组在堆区依然是连续存储的
int *B=new int[3];
//B是一个指向int指针,故对sizeof(B):32位编译器会返回 4,64位编译器会返回8,因此只初始化了B的第一个元素
memset(B,-1,sizeof(B));
printNumber(B,3);
int *b;
cout<<sizeof(b)<<endl;
//正确的赋值方式
memset(B,-1,sizeof(B)*3);
printNumber(B,3);
//二维数组,以这种方式申明的二维数组在内存中是连续存放的,依旧可以认为是一维数组,故还可以用一下方式赋值
int C[2][3];
memset(C,-2,sizeof(C));
print(C,2);
//动态定义二维数组,会发现并没有赋值成功,因为动态二维数组在堆区不在是连续存储的
int **D;
D = new int*[2]; //注意,int*[10]表示一个有10个元素的指针数组
for (int i = 0; i<2; ++i)
{
D[i] = new int[3];
}
memset(D,-1,sizeof(D)*2*3);
print(C,2);
}
C++--memset与sizeof
最新推荐文章于 2022-05-21 15:41:10 发布