在C/C++中,给指针赋值时,int *P=&a;和int *P;P=&a;是否一样?

我觉得一样,

可是前者访问*P就相当于a,但却是a的地址,这不是矛盾吗?

找人解答,并耐心讲解下指针方面的知识,就是指针的应用方面,

举例几个程序可以吧?嘿嘿

你说“可是前者访问*P就相当于a,但却是a的地址,这不是矛盾吗?”,是因为你不明白*p的多义性,举两个例子你就知道了:int *p;这是定义一个指针变量,应该把他看作(int *)p;其中(int *)跟int一样,也看作是一种类型:指向实型数的指针型。
而对于 int *p=&a;
int b;
*p=b;在这里,*p相当于(*p),“ * ”是取内容运算符。
好好看书吧,这都是书上的细节部分,要想学得好,要靠记得牢。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-22
都是定义了一个指针变量,然后把a的地址复制给这个指针变量,效果基本是一样的。

稍微的区别是,一个是直接赋值,一个是先定义,后赋值。区别在于,第二种先定义,后赋值的情况,如果定义与赋值间还有其他代码,那么P指向的地址是未知的,所以使用的话会有未知行为。
如果定义与赋值是连续的语句,那么上述两个内容就完全一样了。
第2个回答  2011-01-23

问题补充:还有 定义一个指针要确定它指向数据的类型 比如 int *P ;p指向的数据类型只能是int型;
那是为什么呢?
因为程序运行执行某种操作的时候需要知道指针的类型
比如 int a[10];
int *p = a;
现在p指向数组的首地址 假设这个地址是0x00000000
那么*p = a[0]
那么怎么指向a[1]呢?执行p = p+1后 *p=a[1]了
请注意 p=p+1不是 0x00000000+1而是0x00000000+4(在32位的机器上)
为什么是加4而不是加1 因为int型在32位机器上是占四个字节
所以指向下一个数组元素的地址就需要把地址移动四个字节
这就是指针需要类型的原因 如果指针是 char类型 那么p=p+1地址就移动一个字节 我的表达能力不太好 不知道你能不能明白

int a;
char *p;
a=4;/*输出的值是否相等取决于此处的赋值范围*/
p=&a;
printf("%d\n",a);
printf("%d\n",*p);
如果a在-128~128间输出都是相等的
超出范围后就不一样了.
这个就像我上面说的 如果是char型 那么printf函数从指针开始读取1个字节输出,如果是int型 那么printf函数从指针开始读取四个字节
a = 4 在内存中存储的为 0x04 0x00 0x00 0x00 (intel的CPU应该是这样存储的 不同的cpu是不一样的好像 地址依次增加)
所以当当a在-128~128时 printf("%d\n",a); printf("%d\n",*p); 都输出0x04 (从指针开始读取一个字节和4个字节是一样的)
如果a大于128 比如在内存中存储的为 0x04 0xFF 0x00 0x00
这样printf("%d\n",*p); 就只读取了 0x04 ,0xFF被抛弃了 所以就不一样了
好像是这个样子的

指针只存放一个地址而已,难道不同数据类型的地址长度什么的都不一样吗?
地址长度是一样的 sizeof(int *) 和 sizeof(char*)在32位机器都是4个字节

以上是我的回答 如果有什么不正确的地方 还请指出 谢谢
第3个回答  2011-01-22
效果一样。
第4个回答  2011-01-22
一样。

在C\/C++中,给指针赋值时,int *P=&a;和int *P;P=&a;是否一样?
你说“可是前者访问*P就相当于a,但却是a的地址,这不是矛盾吗?”,是因为你不明白*p的多义性,举两个例子你就知道了:int *p;这是定义一个指针变量,应该把他看作(int *)p;其中(int *)跟int一样,也看作是一种类型:指向实型数的指针型。而对于 int *p=&a;int b;p=b;在...

...这里给指针赋值的语句int *p=a不是写成这样int *p=&a ?
c语言指针赋值要理解清楚,首先对p定义为指针即*p,然而p就是一个指针,a是一个值,int*p=a的意思就是p指针取a为其值,也就是a赋值给p指针,而你说的*p=&a是错误的,右边是取地址a,左边是p指针取值,这样写相当于p=a,是错误的,指针和赋值就冲突了,变量不一样。说白了*这个符号就是取...

c++,请问*p=&a与p=&a(p是指针)有什么区别
p=&a容易理解,就是把变量a的地址存在指针p。*p=&a是把变量a的地址存放在指针p所指向的内存单元

c++中int* p=& a;什么意思?
int *p=&a; 是等同于 int=*p; p=&a;的。该形式只在定义的时候是正确的。就是指针p所指向地址的内容为a的内容。如果不是定义的时候 p=&a; 就是它字符的那个意思,就是指针p所指向地址的内容为a的地址。Dev C++试了下 ———再附上一些我的相关笔记 “*p”表示地址为p存储单元的内容;...

c++里面*p=&a和p=&a有什么区别
当然有区别。一般情况下,*p=&a说明p是二级指针,而p=&a说明p是一级指针。

*p=&a,*p=a和p=&a各是什么意思,有什么区别?
1.一般来说*p=&a的表示方法是错的,*p=a和p=&a是正确的。2.*p=a的意思:将a的值赋给p指针指向的地址的值;3.p=&a的意思是:将a的地址赋给指针p;4.区别:*p是一个值;p是一个地址;两者完全不相同。5.*代表着p指向的地址的值,简单来说就是取值;&是取地址符号,取的是地址;p是...

int* p= &a和int& b = a有啥区别?都是取地址,第一个是定义一个空指针...
int* p= &a;——声明p是int *型指针,并把变量a(必须是int型)的地址赋给p,以后指针p就指向了a。int& b = a;——声明b是变量a的引用,即给a起了个别名叫b,以后b和a就是同一个变量了。

在c++指针方面的知识里, P= ﹠a和﹡P= ﹠a有什么区别,分别代表什么含义...
int *p; int **ptr; p=&a;\/\/&a的结果是一个指针,类型是int*,指向的类型是int,指向的地址 是a的地址。 *p=24;\/\/*p的结果,在这里它的类型是int,它所占用的地址是p所指向的地 址,显然,*p就是变量a。 ptr=&p;\/\/&p的结果是个指针,该指针的类型是p的类型加个*,在这里是int **。该指针所指向...

C++中*p的值是什么意思?
int a int *p = &a \/\/p存储的是一个 “ int型的变量a的地址”int **q = &p \/\/是q存储的是一个“指向int型的变量a的地址的指针的地址”你可以类比一下,将int*看成一个整体,也就是(int*)(*p)和你平时用的声明指针的方式非常相似(int)(*p)一个是指向int类型的指针,一个是...

在C++中int* p;和int* p;有何区别吗?
一个典型的C程序员会写“int p”,而且振振有词地告诉你“这表示‘*p是一个int’”——听上去挺有道理的。这里,*和p绑在了一起——这就是C的风格。这种风格强调的是语法。而一个典型的C++程序员会写“int p”,并告诉你“p是一个指向int的指针,p的类型是int*”。这种风格强调的是类型。

相似回答