新手求助,关于指针问题
看了C++指针方面的解说和使用,但有些还是不太明白,请较一下前靠们:
1.指针的赋值:不要将一个非地址常量、变量以及无意义的实际地址赋给指针变量,如:
int *p=(char *)100; //上面这句话我理解,这里的(char *)100强制类型转换是为了使类
型一致吧,但为什么说100是一个无意义的实际地址呢?最不明白
就是它为何是一个地址???
2.int a[10];
int *ip=a; //这里应该把指针指向数组的初始地址吧???
int *ip=&a; //错误,地址类型不一致,a的类型是数组,&a是一个数组类型的地
址(???什么是数组类型的地址???)
[解决办法]
int *p=(char *)100; //不能将一个常数付给指针,因为常数在内存中是一个没有实际意义地址
int a[10];
int *ip=a; //没错,是指向数组的初始地址
int *ip=&a; //不能这么赋值,应改成int *ip=&a[0];
[解决办法]
(???什么是数组类型的地址???)
需要使用 指向数组的指针,
而不是指向 int 的指针:
int (*p2)[10]=&a; //OK
[解决办法]
1 地址都是一个整型数据, 所以 100 可以是一个地址,就是内存中地址编码为 100 的这个字节的内存。
char *p=(char *)100; 的意义就是 p 指向编址为100的这块内存区域,注意指针类型要一致
为什么说100是一个无意义的实际地址,
因为无法得知 100 这个地址是否是可用的,
可能可以用,也可能不行,所以没有实际意义。
【实际上,小地址内存通常都是不可用的】
[解决办法]
最后一个应该这样
int aa[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p)[10] = &aa;
for (int i = 0; i < 10; i++)
cout < <(*p)[i] < <endl;