发布网友 发布时间:2022-04-26 07:08
共5个回答
热心网友 时间:2022-06-25 02:18
*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<iostream>
using namespace std;//环境vc6.0int main()
{int *a;a=(int*)5;cout<<(unsigned int)&*a<<endl;}
输出的结果为5。
热心网友 时间:2022-06-25 02:19
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<iostream>
using namespace std;//环境vc6.0int main(){int *a;a=(int*)5;cout<<(unsigned int)&*a<<endl;}
输出的结果为5
参考资料:指针_百度百科
热心网友 时间:2022-06-25 02:19
这是典型的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。
资料来自于:百度百科:指针
热心网友 时间:2022-06-25 02:20
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<stdio.h>5 运行结果
热心网友 时间:2022-06-25 02:20
我是学习计算机的,我来说吧