C++中使用指针的一些误区:
误区一:
char a[]={"HelloWorld"};
int *ptr=(int *)a;
ptr+=5;
cout<<*ptr<<endl;
上面的代码运行将会产生错误.
char类型在内存中占用内存大小为1.而int类型在内存中占用大小为4
所以当上面的char类型a转换为int指针类型..并赋给(int *)类型的ptr.
所以在第三行中“ptr+=5” 就等于4*5 因为a是char类型占用1..ptr占用4 所以ptr+=5 就等于 4*5
所以位置就等于a[20]..所以将报错
误区二:
char a[]={"HelloWorld"};
char *p=a;
char **ptr=&p;
cout<<**ptr<<endl;
ptr++;
cout<<**ptr<<endl;
上面的代码运行将会产生错误.
一个(char *)指针占用的大小是4.
*ptr=&p.所以ptr++也就同等于*ptr+4;也就是说&p+4;
&p+4将会产生出错...请看清楚.是&p+4而不是p+4;
所以上面代码报错
PS: 如果sizeof()方法里的参数是一个指针时.他返回的结果是指针在内存中的大小..而不是指针指向地址的类型的大小