以小程序进行说明这几者之间的关系:
#include <iostream>
int main()
{
char ch_array[10] = “Today”;//最好在声明时即进行初始化
int int_array[10] = {1,2,3,4,5,6};//最好在声明时即进行初始化
//intint_array[10];
//int_array= {1,2,3,4,5,6}这种分步的写法是编译不通过的
cout << “ch_array = ” <<ch_array <<endl;//输出Today
//解释:数组名是第一个元素的地址。对cout,如果
//被提供的是一个字符的地址,会从该字符开始打印
//知道遇到空字符为止
cout << “int_array = ” <<int_array <<endl;//输出首个元素”1”的地址
char *ch_ptr;
ch_ptr = new char;//ch_ptr = newchar[size];
ch_ptr = “DOG”;
//或: char *ch_ptr;
// ch_ptr = “DOG”;//即可以直接赋值
cout << “ch_ptr = ” << ch_ptr<<endl;//输出 DOG
//正常情况下,cout后提供一个指针,将打印地址,但如果
//指针类型是char*,将显示字符串
cout << “&ch_ptr = ” <<(int*)ch_ptr <<endl;//显示首个字符元素的地址
//要显示字符串的地址,须强制转换为其他类型指
//针,如int*
int *int_ptr;
int_ptr = new int;//int_ptr = newint[size];//属于创建动态数组
//或: int*int_ptr = new int; 或 int *int_ptr = new int[size];
//对整型来说,不能像char类型指针那样,未new就使用,以及new分配后
//的赋值方式,均不适用。
//eg:int *int_ptr; cout << “int_ptr = ”<<int_ptr<<endl;输出显示为0
//eg:int*int_ptr; *int_ptr = 10;编译通过,但运行时报Segmentation fault
for(int i = 0; i < 10; i++)
{
*(int_ptr + i) = i+10;
cout<< “*(int_ptr + i) = ” << *(int_ptr + i) <<endl;//依次输出指向的值
}
cout << “int_ptr = ” << int_ptr<<endl;//输出首个元素地址
}