两个类型别名是相同的:
类型别名,别名模板(自C++11起):
类型别名是指代先前定义的类型的名称(类似于typedef):
using identifier attr(optional) = type-id
所以,您可以使用以下内容:
typedef int int_array[4];
或者你可以直接使用以下代码(与上述代码相同):
using int_array = int[4];
当您需要使用
4*sizeof(int)
步骤来处理内存时,例如如果系统
int
大小为4字节,则内存步长为4*4=16字节。即使在这种情况下您可以使用
int_array *p;
,但
++p
会将
p
向前移动一个内存步长,例如16字节。
参见:
1- 使用 using int_array = int[4];
的工作示例:
using std::cout; using std::endl;
int main()
{
int ia[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
// a range for to manage the iteration
// use type alias
using int_array = int[4];
for (int_array& p : ia)
for (int q : p)
cout << q << " ";
cout << endl;
// ordinary for loop using subscripts
for (size_t i = 0; i != 3; ++i)
for (size_t j = 0; j != 4; ++j)
cout << ia[i][j] << " ";
cout << endl;
// using pointers.
// use type alias
for (int_array* p = ia; p != ia + 3; ++p)
for (int *q = *p; q != *p + 4; ++q)
cout << *q << " ";
cout << endl;
return 0;
}
输出 1:
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
使用typedef int int_array[4];
的工作示例:
#include <iostream>
using std::cout; using std::endl;
int main()
{
int ia[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
// a range for to manage the iteration
// use type alias
typedef int int_array[4];
for (int_array& p : ia)
for (int q : p)
cout << q << " ";
cout << endl;
// ordinary for loop using subscripts
for (size_t i = 0; i != 3; ++i)
for (size_t j = 0; j != 4; ++j)
cout << ia[i][j] << " ";
cout << endl;
// using pointers.
// use type alias
for (int_array* p = ia; p != ia + 3; ++p)
for (int *q = *p; q != *p + 4; ++q)
cout << *q << " ";
cout << endl;
return 0;
}
输出2(相同):
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
参考:https://github.com/Mooophy/Cpp-Primer/blob/master/ch03/ex3_44.cpp
注意:编译/链接时使用-std=c++11
。