发布网友 发布时间:2024-10-23 22:58
共2个回答
热心网友 时间:2024-10-27 23:41
这是典型的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。
资料来自于:百度百科:指针
热心网友 时间:2024-10-27 23:39
根据你给出的代码和赋值语句,可以分析出以下情况:
int* a = b;:这行代码将指针变量a指向了b所指向的内存地址。换句话说,a和b指向同一个内存地址。
a = &b;:这行代码将指针变量a的值修改为b的内存地址。现在a指向了b的内存地址。
b = &a;:这行代码将指针变量b的值修改为a的内存地址。现在b指向了a的内存地址。
综上所述,根据这段代码的执行结果,a指向了b的内存地址,而b指向了a的内存地址。因此,a和b都指向了彼此的内存地址,形成了一个循环引用的情况。这种情况可能会导致内存泄漏和程序错误,应该避免出现这样的指针赋值。
热心网友 时间:2024-10-27 23:37
这是典型的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。
资料来自于:百度百科:指针
热心网友 时间:2024-10-27 23:42
根据你给出的代码和赋值语句,可以分析出以下情况:
int* a = b;:这行代码将指针变量a指向了b所指向的内存地址。换句话说,a和b指向同一个内存地址。
a = &b;:这行代码将指针变量a的值修改为b的内存地址。现在a指向了b的内存地址。
b = &a;:这行代码将指针变量b的值修改为a的内存地址。现在b指向了a的内存地址。
综上所述,根据这段代码的执行结果,a指向了b的内存地址,而b指向了a的内存地址。因此,a和b都指向了彼此的内存地址,形成了一个循环引用的情况。这种情况可能会导致内存泄漏和程序错误,应该避免出现这样的指针赋值。