char **p和char *p[]基本一样,
区别讲不出来,写个例子体会吧。
#include <iostream>
using namespace std;
void main()
{
// 第一种初始化方法
char **p = new char *[10];
// 赋值后正常使用
p[0] = "aaa";
cout<<p[0]<<endl;
// 值可以改变
p[0] = "bbb";
// 未赋值使用会崩。编译能过。
//cout<<p[1]<<endl;
// 越界赋值,编译能过,运行能过,输出时崩。
//p[100] = "ccc";
//cout<<p[100]<<endl;
// 第二种初始化方法
unsigned int i = 0;
char** pP = NULL;
pP = (char**)calloc(128, sizeof(char*));
for (i = 0; i < 128; ++i)
{
pP[i] = (char*)calloc(128, sizeof(char));
}
// 这种初始化方法,好像不存在越界。
pP[1000] = "ddd";
cout<<pP[1000]<<endl;
}
char *c与char c[]的区别是前者是常量。
说点题外话,学习编程应该是先学会用,在使用的过程中慢慢领悟。