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只是一个变量,而&是不能给变量赋值的