鱼C论坛

 找回密码
 立即注册
查看: 3617|回复: 19

不理解int *p = &n这句为什么行的通,哪位给我解解惑;

[复制链接]
发表于 2013-12-6 13:10:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我理解:int n;
int* p;
*p = n;
p = &n;
这些都能理解,指针等于指针,变量等于变量;
但是:
*p = &n;是行不通的我也理解;
而为什么:
int *p = &n;就行得通?
int *p = n;就行不通?


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-6 13:43:01 | 显示全部楼层
int *p=&n;
这句话也是对p赋值啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 14:10:13 | 显示全部楼层
晕倒=== 等于
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 15:13:58 | 显示全部楼层
int *p = &n;这一句包括两个部分一个是整形指针变量声明,一部分是赋初值;前面的int *p=之中的*是表示变量类型的(因为前面int声明),并不是*p表示p指向地址里面的数值。这个问题应该是不难吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-6 15:21:32 | 显示全部楼层

int* p和int *p没区别??注意空格的位置!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 15:42:45 | 显示全部楼层
todd 发表于 2013-12-6 15:21
int* p和int *p没区别??注意空格的位置!

没区别的 你只要记住 类型+变量  int* 是类型 无论*跟int 还是跟p,int *p=&n,这里是声明的同事赋值,其实就是int *p,然后p=&n,理解了没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-6 15:58:27 | 显示全部楼层
叁er 发表于 2013-12-6 15:42
没区别的 你只要记住 类型+变量  int* 是类型 无论*跟int 还是跟p,int *p=&n,这里是声明的同事赋值,其 ...

那这个问题我理解了,谢谢!
const (char*) pContent;和const (char) *pContent;是有区别的吧?怎么理解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 16:27:17 | 显示全部楼层
声明同时赋值语句。我的理解是声明了一个指针,赋值一个地址。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 16:58:46 | 显示全部楼层
todd 发表于 2013-12-6 15:21
int* p和int *p没区别??注意空格的位置!

注意*的结合顺序,是左结合,int*  这样才是对指针的正确声明(其实理解了,是否正确声明要分实际情况,主要看怎么理解,两种方式都没错),说的是要声明个整形的指针,*是现结合左边类型,从而说明p是整形的指针,建议看看c/c++中符号的优先级以及结合方向,就自然明白了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-6 20:20:29 | 显示全部楼层
todd 发表于 2013-12-6 15:58
那这个问题我理解了,谢谢!
const (char*) pContent;和const (char) *pContent;是有区别的吧?怎么理解 ...

加括号是有区别的,话说后面的那个是强制类型转换吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-7 07:51:51 | 显示全部楼层
哥给跪了!!貌似当年也问过别人这个问题:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-7 08:48:59 | 显示全部楼层
指针变量可以 用&进行赋值来指向 但不能直接指向到你想要的内存单元上 这样的话C就太强大也太危险了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-7 08:54:53 | 显示全部楼层
int *p;这里是在定义一个变量,在定义的时候,*说明这个变量是指针类型。
*p不是在定义一个变量,而是在对变量p进行运算。不能根据这里的*说p就一定是指针,而应该理解为变量p的类型可以和运算符*一起使用。

同样道理,  int a[5];这里实在定义一个"变量",[ ]说明这个"变量"是数组类型。a[2]不是在定义变量,而是在使用变量。

综上,C语言在定义变量和使用变量的使用都使用*或[ ],但它们的意思不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-7 09:22:24 | 显示全部楼层
我也晕倒~~楼主还是 好好看下C语言的书再纠结也不迟。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-11 13:55:05 | 显示全部楼层
谢谢各位的解答,我明白了一些了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-14 21:17:04 | 显示全部楼层
p是指针变量,而n是整型,当然不能直接赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-14 22:16:15 | 显示全部楼层
int n;
int* p;
*p = n;//这句有问题,运行的时候可能会报错,因为p还没指向具体的内存地址,*p会返回一块随机4字节的内存空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-14 22:33:47 | 显示全部楼层
因为C是强类型的,既然p是int指针,那么给它赋值一定要是同类型的,或者经过类型转换,而n的类型是int,所以不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-14 22:55:52 | 显示全部楼层

int *p = &n;这里的*作用是声明将P设为一个指针变量,现在*p是一个指针变量,存放的是地址,所以可以吧n的地址赋值给P。
int *p = n;同上,*声明P是指针,P里面放的一定是地址。n是一个整形数据,不是n的地址。

p=&n;//p前面没有*,说明是对指针变量赋值,存的是n的地址,不是对p指向的地址存放数据。
*p=n ;//p前面有*,说明是对指针p所指向的地址赋值,存的是数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-15 23:15:23 | 显示全部楼层
本帖最后由 amydog 于 2013-12-15 23:20 编辑

int *p = &n;就行得通?     &n存放的是地址  类型相同
int *p = n;就行不通?      n存放的是某一个具体的数值,类型不同


int* 与 int  *   中间有无空格 都是一样的
int * p      类型+变量名     int*是一个完整的


如果单独的写   *p=n 这样是可以的  这是做运算  

int *p=n    个人觉得编译器 会把int* 当做一个整体,照成类型不同出错



个人看法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表