C++ 一维数组 二维数组 指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 一维数组 二维数组 指针相关的知识,希望对你有一定的参考价值。
1、int
a[3] = {1, 2, 3}
a代表数组的首地址
&a[0]也是数组的首地址
2、
// int a[2][2] = {0, 1, 2, 3};
// **a 就是 a[0][0] 第一行第一列。
// *(*a + 1) 就是 a[0][1] 第一行第二列。
// **(a + 1) 就是 a[1][0] 第二行第一列。
// *(*(a + 1) + 1) 就是 a[1][1] 第二行第二列。
3、int
a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};//相当于是
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
4、
数组指针int
(*ptr)[3] = a;
//正确。
上面这句代码的意思是,定义一个数组ptr,维数是一维数组,元素是3个,并且定义的是一个指针,指向这个数组的首地址,所以可以把a赋值的,因为a是数组的首地址
5、
指针数组
指针数组,就是存放指针的数组,数组里的元素是指针(对比于整型数组,整型数组就是存放整型的数组,数组里的元素是整型)
int *ptr[3];如何理解?按照运算符优先级,[]优先级较大,所以ptr先与[3]结合,表示ptr是一个数组,必然要明确数组的元素类型,所以数组里的元素类型是整型指针(int*),数组的大小不一定需要(定义数组时可以根据初始化的元素个数确定)
ptr[0]就是数组的第零个元素,它是一个整型指针。
示例如下:
1
2
3
4
|
int a[3] = {1, 2, 3}; int x = 5; ptr[0] = &x; ptr[1] = &a[2]; |
2.如何使用?
像一般指针一样使用。*ptr[0]就是第零个元素(一个指针)所指向元素的值,这里是 5。
6、数组指针
#include "stdafx.h"
int main(int argc, char* argv[])
{
int iArr[2][3]={0,1,2,3,4,5};
int *p=iArr[0];//二维数组的首地址
printf("%d \n",p);//1638192
printf("%d \n",iArr);//1638192
printf("%d ",p[1]);
printf("%d\n",*(p+1));//1
printf("%d ",p[2]);
printf("%d\n",*(p+2));//2
printf("%d ",p[3]);
printf("%d\n",*(p+3));//3
int(*pArr)[3]=iArr;//这句代码的意思是,一个指针,指向三个整型元素 会有多行多列
printf("%d\n",*(pArr));//1638192 1638196 1638200 1638204
printf("%d\n",*(pArr+1));//1638204
printf("%d\n",*(*(pArr)));//0
printf("%d\n",*(*(pArr+1)));//3
printf("%d ",*(*(pArr+1)+2));//5
getchar();
return 0;
}
7、一维数组 二维数组 初始化
#include "stdafx.h"
int main(int argc, char* argv[])
{
int test[3][3];
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%d ",test[i][j]);
}
printf("\n");
}
//-858993460 858993460 858993460
//-858993460 858993460 858993460
//-858993460 858993460 858993460
int test2[3][3]={0};
for(int i1=0;i1<3;i1++)
{
for(int j1=0;j1<3;j1++)
{
printf("%d ",test2[i1][j1]);
}
printf("\n");
}
//-0 0 0
//-0 0 0
//-0 0 0
int test3[3];
for(int hh=0;hh<3;hh++)
{
printf("%d ",test3[hh]);
}
printf("\n");
printf("\n");
//-858993460 858993460 858993460
int test4[3]={0};
for(int hh1=0;hh1<3;hh1++)
{
printf("%d ",test4[hh1]);
}
printf("\n");
printf("\n");
//0 0 0
getchar();
return 0;
}
8、sizeof 数组 指针
sizeof 数组不会退化为指针
#include "stdafx.h"
int main(int argc, char* argv[])
{
//此时,传递的数组名不再是指针的作用了
int test[]={0,1,2,3,4,5};
int *p=test;
printf("test 占用的字节数:%d\n",sizeof(test));//24 占用了24个字节
printf("test 占用的字节数:%d\n",sizeof(&test));//24 占用了24个字节
printf("p 占用的字节数:%d\n",sizeof(p));//4 指针占用4个字节
int test2[20]={0,1,2,3,4,5};
printf("test2 占用的字节数:%d\n",sizeof(test2));//80 占用了80个字节
getchar();
return 0;
}
9、strlen 数组 指针
strlen 数组会退化为指针
#include "stdafx.h"
#include <string.h>
int main(int argc, char* argv[])
{
char *p="123456";
printf("%d\n",strlen(p));//6
char test[20]={1,2,3,4,5,6};
printf("%d\n",strlen(test));//6
char test1[]={1,2,3,4,5,6};
printf("%d\n",strlen(test1));//14
char test2[2]={0};
printf("%d\n",strlen(test2));//0
char test3[2];
printf("%d\n",strlen(test3));//4
char test4[20];
printf("%d\n",strlen(test4));//24
char test5[20]={1};
printf("%d\n",strlen(test5));//1
char test6[20]={0};
printf("%d\n",strlen(test6));//0
getchar();
return 0;
}
10、指针 数组 作为参数传递
#include "stdafx.h"
#include <string.h>
//处理数组
void ProcessArray(char arrary[])
{
printf("%s\n",arrary);//我的
}
//处理整型数组
void ProcessArray(int arrary[])
{
printf("%d\n",arrary[0]);//我的
}
//处理指针
void ProcessPointer(int *p)
{
printf("%d\n ",*(p+1));
}
//处理引用
void ProcessRef(int &p)
{
printf("%d\n ",p);
}
int main(int argc, char* argv[])
{
char a[10]={"我的"};
int test[10]={0,1,2,3,4,5};
int *p=test;
int k=5;
ProcessArray(a);//我的
ProcessArray(test);//0
ProcessPointer(p);//1
ProcessRef(k);//5
return 0;
}
以上是关于C++ 一维数组 二维数组 指针的主要内容,如果未能解决你的问题,请参考以下文章