如何将详解C指针与二维数组名改写为一个长尾词?

2026-04-18 14:422阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1889个文字,预计阅读时间需要8分钟。

如何将详解C指针与二维数组名改写为一个长尾词?

和一维数组类似,C++中将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素是一维数组。下面总结一下二维数组名的性质。

如何将详解C指针与二维数组名改写为一个长尾词?

和一维数组类似,C++中将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素是一维数组。下面总结一下二维数组名的性质:

1. 二维数组名在表达式中表示的是二维数组第一个元素的地址。

2.二维数组名可以用来访问数组中的元素,例如`arrayName[i][j]`。

3.二维数组名在表达式中可以与指针运算符结合使用,例如`*(arrayName + i) + j`。

4.二维数组名在表达式中可以与数组下标运算符结合使用,例如`arrayName[i][j]`。

总结:二维数组名在C++中具有与一维数组类似的性质,但需要注意的是二维数组名表示的是二维数组第一个元素的地址,而不是整个二维数组。

和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,下面详细总结下二维数组名的性质。

和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,以下面的程序为例,二维数组名 array2d&array2d[0] 等效,它们的类型都为 short (*)[5];对数组名应用地址运算符时,得到的是整个数组的地址,它的类型为 short (*)[5][5],假设 short 宽 2 字节,系统为 32 位,数组首地址为0x00BCF8FC,例子中几种表示的区别为:

  • 数组名array2d&array2d[0]等效,类型都为short (*)[5],存储的是一个 10 字节内存块的地址,它们指向的对象是包含 5 个元素的short数组,但在运用sizeof()时,这两者会有区别,sizeof(array2d)=50sizeof(&array2d[0])=4
  • 表示&array2d的类型为short (*)[5][5],存储的是一个 50 字节内存块的地址,它指向的对象是 5 行 5 列的二维short数组。
  • 表示&array2d[0][0]array2d[0]等效,类型都为short *,存储的是一个 2 字节内存块的地址,它指向的对象是short类型数据,但在运用sizeof()时,这两者会有区别,sizeof(&array2d[0][0])=4sizeof(array2d[0])=10
  • 类型short **,存储的是一个 4 字节内存块的地址,它指向的对象是short*类型数据。

//声明并初始化数组 short array2d[5][5] = {{5,2,8,4,1}, {2,2,4,6,8}, {1,5,8,9,4}, {5,7,6,2,5}, {7,6,5,8,1}}; //声明并初始化指针一:以下几种赋值结果对ptra等效 short (*ptra)[5] = array2d; //方式一:值为0x00BCF8FC short (*ptra)[5] = &array2d[0]; //方式二:值为0x00BCF8FC //声明并初始化指针二 short (*ptrb)[5][5] = &array2d; //值为0x00BCF8FC //声明并初始化指针三:以下几种赋值结果对ptrc等效 short *ptrc = &array2d[0][0]; //方式一:值为0x00BCF8FC short *ptrc = array2d[0]; //方式二:值为0x00BCF8FC //声明并初始化指针四:以下几种赋值结果对ptrd等效 short *ptrTmp[5] = {array2d[0],array2d[1],array2d[2],array2d[3],array2d[4]}; short** ptrd = ptrTmp; //方式一:值为0x00BCF8A4 short** ptrd = new short*[5]{ array2d[0], array2d[1], array2d[2], array2d[3], array2d[4]}; //方式二:值为0x01156470,需配合使用delete[]释放内存 short** ptrd = new short*[5](); ptrd[0] = array2d[0]; ptrd[1] = array2d[1]; ptrd[2] = array2d[2]; ptrd[3] = array2d[3]; ptrd[4] = array2d[4]; //方式三:值为0x01046AE0,需配合使用delete[]释放内存 //访问数组第3行第4列的元素 cout << array2d[2][3]; //结果为9 cout << *(array2d[2]+3); //结果为9 cout << *(*(array2d+2)+3);//结果为9 cout << ptra[2][3]; //结果为9 cout << *(ptra[2]+3); //结果为9 cout << *(*(ptra+2)+3); //结果为9 cout << (*ptrb)[2][3]; //结果为9 cout << *((*ptrb)[2]+3);//结果为9 cout << *(*(*ptrb+2)+3);//结果为9 cout << ptrc[2*5+3]; //结果为9 cout << *(ptrc+2*5+3); //结果为9 cout << ptrd[2][3]; //结果为9 cout << *(ptrd[2]+3); //结果为9 cout << *(*(ptrd+2)+3); //结果为9 //应用指针算术时单位1表示的字节数 cout << int(array2d+1)-int(array2d); //结果为10 cout << int(&array2d[0]+1)-int(&array2d[0]); //结果为10 cout << int(&array2d+1)-int(&array2d); //结果为50 cout << int(&array2d[0][0]+1)-int(&array2d[0][0]);//结果为2 cout << int(array2d[0]+1)-int(array2d[0]); //结果为2 cout << int(ptra+1)-int(ptra); //结果为10 cout << int(ptrb+1)-int(ptrb); //结果为50 cout << int(ptrc+1)-int(ptrc); //结果为2 cout << int(ptrd+1)-int(ptrd); //结果为4 //应用sizeof()获得内存量大小 cout << sizeof(array2d); //结果为50 cout << sizeof(&array2d[0]); //结果为4 cout << sizeof(&array2d); //结果为4 cout << sizeof(&array2d[0][0]);//结果为4 cout << sizeof(array2d[0]); //结果为10 cout << sizeof(array2d[0][0]); //结果为2 cout << sizeof(ptra); //结果为4 cout << sizeof(ptrb); //结果为4 cout << sizeof(ptrc); //结果为4 cout << sizeof(ptrd); //结果为4

版权声明:本文系博主原创文章,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请附上出处链接。遵循 署名-非商业性使用-相同方式共享 4.0 国际版 (CC BY-NC-SA 4.0) 版权协议。

补充介绍:C++二维数组名与数组指针的思考

二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的。
二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针。体现在sizeof()上的不同。

#include <iostream> using namespace std; int main() { // a是一个二维数组名,指向一个二维数组 int a[2][3] = {{1,2,3},{4,5,6}}; // a所占的内存为24,即6*4 cout<<sizeof(a)<<endl; // 输出为4 // a:&a[0] a+1:&a[1] *(a+1) : a[1] = &a[1][0] // **(a+1) = a[1][0] cout<<**(a+1)<<endl; // 输出为3 // a:&a[0] *a:a[0]:&a[0][0] *a+2:&a[0][2] // *(*a+2):a[0][2] cout<<*(*a+2)<<endl; // 数组指针 int (*b)[3] = a; // 数组指针可以当做二维数组名用 cout<<**(b+1)<<endl; cout<<*(*b+2)<<endl; cout<<sizeof(b)<<endl; }

到此这篇关于C++ 指针与二维数组名的文章就介绍到这了,更多相关C++ 指针与二维数组内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计1889个文字,预计阅读时间需要8分钟。

如何将详解C指针与二维数组名改写为一个长尾词?

和一维数组类似,C++中将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素是一维数组。下面总结一下二维数组名的性质。

如何将详解C指针与二维数组名改写为一个长尾词?

和一维数组类似,C++中将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素是一维数组。下面总结一下二维数组名的性质:

1. 二维数组名在表达式中表示的是二维数组第一个元素的地址。

2.二维数组名可以用来访问数组中的元素,例如`arrayName[i][j]`。

3.二维数组名在表达式中可以与指针运算符结合使用,例如`*(arrayName + i) + j`。

4.二维数组名在表达式中可以与数组下标运算符结合使用,例如`arrayName[i][j]`。

总结:二维数组名在C++中具有与一维数组类似的性质,但需要注意的是二维数组名表示的是二维数组第一个元素的地址,而不是整个二维数组。

和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,下面详细总结下二维数组名的性质。

和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,以下面的程序为例,二维数组名 array2d&array2d[0] 等效,它们的类型都为 short (*)[5];对数组名应用地址运算符时,得到的是整个数组的地址,它的类型为 short (*)[5][5],假设 short 宽 2 字节,系统为 32 位,数组首地址为0x00BCF8FC,例子中几种表示的区别为:

  • 数组名array2d&array2d[0]等效,类型都为short (*)[5],存储的是一个 10 字节内存块的地址,它们指向的对象是包含 5 个元素的short数组,但在运用sizeof()时,这两者会有区别,sizeof(array2d)=50sizeof(&array2d[0])=4
  • 表示&array2d的类型为short (*)[5][5],存储的是一个 50 字节内存块的地址,它指向的对象是 5 行 5 列的二维short数组。
  • 表示&array2d[0][0]array2d[0]等效,类型都为short *,存储的是一个 2 字节内存块的地址,它指向的对象是short类型数据,但在运用sizeof()时,这两者会有区别,sizeof(&array2d[0][0])=4sizeof(array2d[0])=10
  • 类型short **,存储的是一个 4 字节内存块的地址,它指向的对象是short*类型数据。

//声明并初始化数组 short array2d[5][5] = {{5,2,8,4,1}, {2,2,4,6,8}, {1,5,8,9,4}, {5,7,6,2,5}, {7,6,5,8,1}}; //声明并初始化指针一:以下几种赋值结果对ptra等效 short (*ptra)[5] = array2d; //方式一:值为0x00BCF8FC short (*ptra)[5] = &array2d[0]; //方式二:值为0x00BCF8FC //声明并初始化指针二 short (*ptrb)[5][5] = &array2d; //值为0x00BCF8FC //声明并初始化指针三:以下几种赋值结果对ptrc等效 short *ptrc = &array2d[0][0]; //方式一:值为0x00BCF8FC short *ptrc = array2d[0]; //方式二:值为0x00BCF8FC //声明并初始化指针四:以下几种赋值结果对ptrd等效 short *ptrTmp[5] = {array2d[0],array2d[1],array2d[2],array2d[3],array2d[4]}; short** ptrd = ptrTmp; //方式一:值为0x00BCF8A4 short** ptrd = new short*[5]{ array2d[0], array2d[1], array2d[2], array2d[3], array2d[4]}; //方式二:值为0x01156470,需配合使用delete[]释放内存 short** ptrd = new short*[5](); ptrd[0] = array2d[0]; ptrd[1] = array2d[1]; ptrd[2] = array2d[2]; ptrd[3] = array2d[3]; ptrd[4] = array2d[4]; //方式三:值为0x01046AE0,需配合使用delete[]释放内存 //访问数组第3行第4列的元素 cout << array2d[2][3]; //结果为9 cout << *(array2d[2]+3); //结果为9 cout << *(*(array2d+2)+3);//结果为9 cout << ptra[2][3]; //结果为9 cout << *(ptra[2]+3); //结果为9 cout << *(*(ptra+2)+3); //结果为9 cout << (*ptrb)[2][3]; //结果为9 cout << *((*ptrb)[2]+3);//结果为9 cout << *(*(*ptrb+2)+3);//结果为9 cout << ptrc[2*5+3]; //结果为9 cout << *(ptrc+2*5+3); //结果为9 cout << ptrd[2][3]; //结果为9 cout << *(ptrd[2]+3); //结果为9 cout << *(*(ptrd+2)+3); //结果为9 //应用指针算术时单位1表示的字节数 cout << int(array2d+1)-int(array2d); //结果为10 cout << int(&array2d[0]+1)-int(&array2d[0]); //结果为10 cout << int(&array2d+1)-int(&array2d); //结果为50 cout << int(&array2d[0][0]+1)-int(&array2d[0][0]);//结果为2 cout << int(array2d[0]+1)-int(array2d[0]); //结果为2 cout << int(ptra+1)-int(ptra); //结果为10 cout << int(ptrb+1)-int(ptrb); //结果为50 cout << int(ptrc+1)-int(ptrc); //结果为2 cout << int(ptrd+1)-int(ptrd); //结果为4 //应用sizeof()获得内存量大小 cout << sizeof(array2d); //结果为50 cout << sizeof(&array2d[0]); //结果为4 cout << sizeof(&array2d); //结果为4 cout << sizeof(&array2d[0][0]);//结果为4 cout << sizeof(array2d[0]); //结果为10 cout << sizeof(array2d[0][0]); //结果为2 cout << sizeof(ptra); //结果为4 cout << sizeof(ptrb); //结果为4 cout << sizeof(ptrc); //结果为4 cout << sizeof(ptrd); //结果为4

版权声明:本文系博主原创文章,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请附上出处链接。遵循 署名-非商业性使用-相同方式共享 4.0 国际版 (CC BY-NC-SA 4.0) 版权协议。

补充介绍:C++二维数组名与数组指针的思考

二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的。
二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针。体现在sizeof()上的不同。

#include <iostream> using namespace std; int main() { // a是一个二维数组名,指向一个二维数组 int a[2][3] = {{1,2,3},{4,5,6}}; // a所占的内存为24,即6*4 cout<<sizeof(a)<<endl; // 输出为4 // a:&a[0] a+1:&a[1] *(a+1) : a[1] = &a[1][0] // **(a+1) = a[1][0] cout<<**(a+1)<<endl; // 输出为3 // a:&a[0] *a:a[0]:&a[0][0] *a+2:&a[0][2] // *(*a+2):a[0][2] cout<<*(*a+2)<<endl; // 数组指针 int (*b)[3] = a; // 数组指针可以当做二维数组名用 cout<<**(b+1)<<endl; cout<<*(*b+2)<<endl; cout<<sizeof(b)<<endl; }

到此这篇关于C++ 指针与二维数组名的文章就介绍到这了,更多相关C++ 指针与二维数组内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!