C语言,指针和存储的关系(已解决疑问)

总是搞不懂,指针在内存里怎么存放?

代码测试:

①查看a,b,p的地址。
②查看a,b,p这个地址下装的是什么?

#include <stdio.h>
int main(void){
	double a=3.0,b;
	double *p=&b;
	*p=-2.3;
	//a,b,p的地址。 
	printf("&a=%p\n",&a);//如果用%d的话就是十进制的表达 
	printf("&b=%p\n",&b);
	printf("&p=%p\n",&p);
	// a,b,p地址内装着什么? 
	printf("a=%lf\n",a);
	printf("b=%lf\n",b);
	printf("p=%p\n",p);
	return 0;
} 

运行结果疑问:

①这里的62FE18是bit为单位还是(8个bit)字节为单位? (✔)
②为什么b和指针变量本身p的存放位址只差了2个字节?我们设定的指针是double类型,用sizeof(p)也得到8;在我看来要想分开指针变量p它的地址和变量b的地址,指针变量至少得在62FE02这个位置。。。。。
(×)
**

解答了②:10和08就是相差8,十六进制的。之前带着10进制的想法看。

**

**

解决疑问①:

**

内存中/包括dev C++显示出的地址都是以字节为单位的。

#include <stdio.h>
int main(void){
	double a=3.0,b=-2.3;
	//a,b的地址。 
	printf("&a=%p\n",&a);//如果用%d的话就是十进制的表达 
	printf("&b=%p\n",&b);
	printf("double=%d",sizeof(double));
	return 0; 
} 

测试2**

尝试解决疑问②:

**

步骤一:

**
指针它本身存放的地址在哪?以及和变量存放地址的关系,如图所示:答案得,指针和变量地址是紧挨着,差了一个类型(这里我定义double)的长度。

#include <stdio.h>
int main(){
	double a,b,c;
	double *p=&a;
	double *q=&b;
	double *t=&c;
	
	//a,b,c各自地址 
	printf("a %p\n",&a);
	printf("b %p\n",&b);
	printf("c %p\n",&c);
	
	//指针p,q,t各自地址 
	printf("p %p\n",&p);
	printf("q %p\n",&q);
	printf("t %p\n",&t);
	return 0;
}

在这里插入图片描述**

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读