分类：电脑/网络-程序设计-C/C++
问题：C/C中的指针问题：inti；int*pa=&i；问题1：书上说 
问题1：书上说这样给指针赋值必须保证i的值也是整数，为什么？表示一个单元的地址的指针必须是整数我能理解，但它所指向的地址的内容i为什么也必须是整数，不能是Float等等数据类型呢？问题2：&和*一个是取变量i的地址，一个是取指针pa的内容，是一对相反的操作，为什么它们还能够相互赋值？我总觉得应该这样写：int *p=i或者int p=&i，为什么不对呢？
回答：int i;
int *pa=&i;
因为i的类型是int，所以他的地址只占用了4个字节，如果用4个字节存放float会发生数据丢失，int类型的指针必须指向int类型的变量，指针记录的是变量在内存中的开始地址，比如i的地址是0x0001，那用*pa定位变量i的时候只会从0x0001开始取4个字节，如果存放的是float，也会发生数据丢失。

还是C的概念模糊

指针的意思就是变量在内存中存放的地址，变量只是一个别名，只有存放的数据才有意义，&i找到的是变量存放的地址，而不是包含的数据。

int *p=i
错在给指针赋值必须是地址，i只是一个变量，用&取出来的才是地址

int p=&i
错在指针的定义，语法规定的指针必须加*号，没有*号的p只是一个变量，而&是不能给变量赋值的