搜索
首页 电脑/网络 程序设计 C/C++

C/C 中的指针问题:int i;int *pa=&i;

问题1:书上说这样给指针赋值必须保证i的值也是整数,为什么?表示一个内存单元的地址的指针必须是整数我能理解,但它所指向的地址的内容i为什么也必须是整数,不能是Float等等数据类型呢? 问题2:&和*一个是取变量i的地址,一个是取指针pa的内容,是一对相反的操作,为什么它们还能够相互赋值?我总觉得应该这样写:int *p=i或者int p=&i,为什么不对呢?

全部回答

2006-02-07

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

2006-02-08

56 0
int i; int *pa=&i; 我也说一下 前面的int是数据定义,i是整型数据 在第二行中,表达的是,pa是一个指针,它指向的地址中存放的应是整型数据,该地址存放的是变量i.就这么简单.

2006-02-08

42 0
这是定义,C语言就是这么规定的。没有为什么!!!

2006-02-07

75 0
    指针类型是告诉计算机以什么方式读取该地址的数据。 例如,指针p的类型是int,计算机就会认为指针p指向的地址贮存了一个int类型的数据,调用时计算机就会以读取int类型的方法去读取这个地址的数据。
  如果该地址本来贮存了一个其他类型的数据,就不能得到应有的效果。 正如楼主所说,在变量定义里的*和表达式里的*意义是不同的,前者表示定义一个指针,后者表示指针的所指的地址。   对于 int *p=&a; 可以看做这样: int* p=&a; 两者是一样的。
     #include int a; int* p=&a; int *q=&a; void main() { a=100; cout<<"a="<<a<<"\n"; cout<<"*p="<<*p<<"\n"; cout<<"*q="<<*q; } 运行结果 a=100 *p=100 *q=100。
  

2006-02-07

73 0
    问题1:楼主可能前面少写了一些话,一个整型类型的指针必须指向一个整型类型的变量,换句话说就是指针的类型和所指向的变量的类型必须一致。要想指向float类型的话,必须要声明float类型的指针。
  当然,至于类型转换都是后话了,但是原则要清楚。 问题2:还是那个问题,变量的类型和要赋的值的类型要一致。  int *p=i;里面定义的p是指针类型,应该给他装地址,给他赋的值却是一个整型的i(没看见你怎么定义的i,假设你这里的i就是整型的,如果你的i是整型指针的话,那么就没错了)。
  int p=&i;这句定义的p是一个整型的,需要赋给他整数,但是给他赋的值是一个整型变量的地址,所以是不对的。   记住类型需要一致就行了。

2006-02-07

74 0
问题1:“指针赋值必须保证i的值也是整数”其实这句话说得有点绝对,有时候也可以灵活运用。如果把int型指针指向一个float那么float的位数比int多,那么读取时会有问题,不能正确读出float数值。 问题2:这个比较凑巧,刚好在声明的时候用了,可以分开写。 int *pa; pa = &i; 这个你理解的没错:)

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
C/C++
VB
数据库
汇编语言
JAVA相关
VC++
C#/.NET
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报