数组名做函数形参
数组未开辟空间时
#include <iostream>
using namespace std;
void test(int* a)
{
*a = 0;
*(a+1) = 1;
*(a+2) = 2;
cout<<a[0]<<a[1]<<a[2]<<endl;
return;
}
int main(int argc,char* argv[])
{
int* a;
test(a);
cout<<a[0]<<a[1]<<a[2]<<endl;
return 0;
}
输出为空,因为a没有开辟内存。
开辟内存时
#include <iostream>
using namespace std;
void test(int* a)
{
*a = 0;
*(a+1) = 1;
*(a+2) = 2;
return;
}
int main(int argc,char* argv[])
{
int* a = new int[10];
test(a);
cout<<a[0]<<a[1]<<a[2]<<endl;
return 0;
}
输出为012,因为a开辟了内存。
指针
指针变量所占内存空间
指针自身也是一个变量类型,占8个字节。
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<sizeof(int*)<<endl;
cout<<sizeof(double*)<<endl;
cout<<sizeof(char*)<<endl;
}
指针数组/数组指针
指针数组 int* a[5] 是一个数组,数组内部的变量为指针类型
数组指针 int (*a)[5] 是一个指针,指针指向数组类型变量
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
// 指针数组
int a = 1;
int b = 2;
int* a_ptr = &a;
int* b_ptr = &b;
int* type1[2] = {a_ptr,b_ptr};
cout<<*type1[0]<<endl;
// 数组指针
int(*c)[2];
int d[2] = {1,2};
c = &d;
cout<<*(*c+1);
}