C语言指针相关知识点

本文详细介绍了计算机内存地址的连续编号机制,32位与64位操作系统中指针变量的字节数,以及指针在C语言中的使用,包括如何通过指针访问和操作数组元素。示例代码展示了不同形式表示数组元素的指针表达方式,并通过运行结果加以解释。
摘要由CSDN通过智能技术生成

知识点整理:

1、计算机操作系统OS给内存中的每个字节一个连续的地址编号,每个字节拥有一个连续增长的地址编号。

2、在32位操作系统中,一个指针变量占4字节;在64位操作系统中一个指针变量占8字节。

3、32位OS最多可以给2^32个字节编号。

4、指针变量也是变量,存的值为地址。

5、下图为一级指针变量p与变量a的关系:

代码展示:

#include<stdio.h>
int main(){
	int a=123;
	int *p=&a;
	int **q=&p;
	printf("a=%d &a=%d p=%d &p=%d *p=%d q=%d &q=%d *q=%d **q=%d\n",a,&a,p,&p,*p,q,&q,*q,**q);
	return 0;
}

运行结果:

a=123 &a=1339599740 p=1339599740 &p=1339599744 *p=123 q=1339599744 &q=1339599752 *q=1339599740 **q=123

如下例题,用不同的形式表示a[1].x:

#include<stdio.h>
struct Node{
	int x=100,y=200;
};
int main(){
	struct Node a[2],*p=a;
	//用不同的形式表示a[1].x
	printf("a[1].x=%d\n",a[1].x);
	printf("(*(a+1)).x=%d\n",(*(a+1)).x);
	printf("(*(&a[0]+1)).x=%d\n",(*(&a[0]+1)).x);
	printf("(*(&a[1])).x=%d\n",(*(&a[1])).x);
	printf("(a+1)->x=%d\n",(a+1)->x);	
	printf("(&a[0]+1)->x=%d\n",(&a[0]+1)->x);
	printf("(&a[1])->x=%d\n",(&a[1])->x);
	
	printf("(p+1)->x=%d\n",(p+1)->x);
	printf("(*(p+1)).x=%d\n",(*(p+1)).x);
	printf("(&p[0]+1)->x=%d\n",(&p[0]+1)->x);
	printf("(*(&p[0]+1)).x=%d\n",(*(&p[0]+1)).x);
	printf("p[1].x=%d\n",p[1].x);
	printf("(*(&p[1])).x=%d\n",(*(&p[1])).x);
	printf("(&p[1])->x=%d\n",(&p[1])->x);
	
	//printf("p[1]->x=%d\n",p[1]->x);//有误!
	//printf("(&a+1)->x=%d\n",(&a+1)->x);//有误!
	//printf("(*(&a+1)).x=%d\n",(*(&a+1)).x);//有误!
	//printf("(*(&p+1)).x=%d\n",(*(&p+1)).x);//有误!
	//printf("(&p+1)->x=%d\n",(&p+1)->x);//有误!
	return 0;
}

示例运行结果:

a[1].x=100
(*(a+1)).x=100
(*(&a[0]+1)).x=100
(*(&a[1])).x=100
(a+1)->x=100
(&a[0]+1)->x=100
(&a[1])->x=100
(p+1)->x=100
(*(p+1)).x=100
(&p[0]+1)->x=100
(*(&p[0]+1)).x=100
p[1].x=100
(*(&p[1])).x=100
(&p[1])->x=100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林月明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值