int *a=b与int*a=&b有什么不同

差点把我弄晕了,请问哪位朋友清楚,指教指教!谢谢了!
2024-12-28 16:54:02
推荐回答(5个)
回答1:

int *a=b是说把b的值赋值给指针a(*a), int*a=&b是说让指针a(*a)指向b的地址。
举个例子说: 
int b=5,c=9 

int *a1=b;----------------------1 

int *a2=&b;_____________________2 

b=c;-------------------------3
这个时候*a1=5,*a2=9 。因为在说第一步时已经把b的值,也就是5传给*a1,所以*a1=5 。在第二步时,把b的地址,也即是&b传给了*a2,这个时候*a2=5 。

但是在第三步时,b的值变成了c的值,也就是9,我们知道这个时候 b的地址早就传给*a2了,所以,*a2和这个时候的b的值是一样的, 即*a2=9。

扩展资料:

(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。

假设有这么一段代码:(假设开辟空间时p 被分配给了3001H、3002H 两个位置)

int *p;p=2003H;*p=3000H,**p的值为多少?

**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。

那么&&p、*(&p)和&(*p)又等于多少?

&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?

*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。

&*p=&(*p)=&(3000H)=2003H,之前有人认为这个是不成立的,实际上&(3000H)是求存储3000H这个变量所在的内存地址,仍然是p的值。下面的代码是个很简单的例子:

#include

using namespace std;//环境vc6.0int main()

{int *a;a=(int*)5;cout<<(unsigned int)&*a<

输出的结果为5

参考资料:指针_百度百科

回答2:

*a=b表示a指针所指向的数据,等于b。*a=&b表示a指针所指向的数据,等于b的地址。

1、int *a=b是说把b的值赋值给指针a(*a), int*a=&b是说让指针a(*a)指向b的地址。 举个例子说: int b=5,c=9。

2、int *a1=b;----------------------1。

3、int *a2=&b;_____________________2。

4、b=c;-------------------------3 这个时候*a1=5,*a2=9 。因为在说第一步时已经把b的值,也就是5传给*a1,所以*a1=5 。在第二步时,把b的地址,也即是&b传给了*a2,这个时候*a2=5。

5、但是在第三步时,b的值变成了c的值,也就是9,我们知道这个时候 b的地址早就传给*a2了,所以,*a2和这个时候的b的值是一样的, 即*a2=9。

扩展资料:

(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。

假设有这么一段代码:(假设开辟空间时p 被分配给了3001H、3002H 两个位置)

int *p;p=2003H;*p=3000H,**p的值为多少?

**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。

那么&&p、*(&p)和&(*p)又等于多少?

&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?

*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。

&*p=&(*p)=&(3000H)=2003H,之前有人认为这个是不成立的,实际上&(3000H)是求存储3000H这个变量所在的内存地址,仍然是p的值。下面的代码是个很简单的例子:

#include

using namespace std;//环境vc6.0int main()

{int *a;a=(int*)5;cout<<(unsigned int)&*a<

输出的结果为5。

回答3:

这是典型的c语言指针题

int *a表示定义了一个int型的指针

*a=b表示指针a指向b,即把b赋值给*a;

&是取地址符,&b代表b在内存中的地址,*a=&b表示把b的地址赋值给*a。

利用编译器编译该代码:

结果为:

拓展资料

*和&运算

(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。我们假设有这么两段内存地址空间,他们取值如下:(单位:H,16 进制)

假设有这么一段代码:(假设开辟空间时p 被分配给了3001H、3002H 两个位置)

int *p;

p=2003H;

*p=3000H

**p的值为多少?

**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。

那么&&p、*(&p)和&(*p)又等于多少?

&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?

*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。

资料来自于:百度百科:指针



回答4:

1 答案

    不同点在于a的值不一样

2 关于指针

    在32位机器里,指针类型为4个字节,一般用16进制的形式来表示

3 分析

    int*a;表示a被声明为int型指针类型

    (1)在int *a=b;里

    若b是整数12,则 a的值为 0x0000000c

    在C语言中 int*a=b;是报错的,需要强制转换才行 int*a=(int*)b

    (2)在int *a=&b;里

    表示把b的地址赋给a,加入b的地址是 0xff00ff00

    则a的值也为0xff00ff00

    当然,在每次程序运行时,b被分配的地址是随机的,所以不一定是0xff00ff00

4 用一个小示例验证

#include

int main(){
    int b = 12;
    int *a1 = (int*)b;
    int *a2 = &b;
    printf("a1=0x%08x\na2=0x%08x\n", a1, a2);

    getchar();
    return 0;
}

5 运行结果

    

    

    

回答5:

我是学习计算机的,我来说吧
int *a=b是说把b的值赋值给指针a(*a),
int*a=&b是说让指针a(*a)指向b的地址。
举个例子说,
int b=5,c=9
int *a1=b;----------------------1
int *a2=&b;_____________________2
b=c;-------------------------3
这个时候*a1=5,*a2=9
因为在说第一步时已经把b的值,也就是5传给*a1,所以*a1=5

在第二步时,把b的地址,也即是&b传给了*a2,这个时候*a2=5
但是在第三步时,b的值变成了c的值,也就是9,我们知道这个时候
b的地址早就传给*a2了,所以,*a2和这个时候的b的值是一样的,
即*a2=9。
谢谢把分给我。