栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言指针相关知识点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言指针相关知识点

知识点整理:

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

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

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

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

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

代码展示:

#include
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=%dn",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
struct Node{
	int x=100,y=200;
};
int main(){
	struct Node a[2],*p=a;
	//用不同的形式表示a[1].x
	printf("a[1].x=%dn",a[1].x);
	printf("(*(a+1)).x=%dn",(*(a+1)).x);
	printf("(*(&a[0]+1)).x=%dn",(*(&a[0]+1)).x);
	printf("(*(&a[1])).x=%dn",(*(&a[1])).x);
	printf("(a+1)->x=%dn",(a+1)->x);	
	printf("(&a[0]+1)->x=%dn",(&a[0]+1)->x);
	printf("(&a[1])->x=%dn",(&a[1])->x);
	
	printf("(p+1)->x=%dn",(p+1)->x);
	printf("(*(p+1)).x=%dn",(*(p+1)).x);
	printf("(&p[0]+1)->x=%dn",(&p[0]+1)->x);
	printf("(*(&p[0]+1)).x=%dn",(*(&p[0]+1)).x);
	printf("p[1].x=%dn",p[1].x);
	printf("(*(&p[1])).x=%dn",(*(&p[1])).x);
	printf("(&p[1])->x=%dn",(&p[1])->x);
	
	//printf("p[1]->x=%dn",p[1]->x);//有误!
	//printf("(&a+1)->x=%dn",(&a+1)->x);//有误!
	//printf("(*(&a+1)).x=%dn",(*(&a+1)).x);//有误!
	//printf("(*(&p+1)).x=%dn",(*(&p+1)).x);//有误!
	//printf("(&p+1)->x=%dn",(&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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/957634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号