首页 > 其他分享 >指针练习(1)

指针练习(1)

时间:2023-09-05 21:31:35浏览次数:45  
标签:int 练习 ptr1 地址 数组 printf ptr 指针

1.

int main()
{
	int a[3][2] = { (0,1),(2,3),(4,5) };
	int* p;
	p = a[0];
	printf("%d", p[0]);
	return 0;
}

解析:a是一个3行2列的二维数组,对他进行初始化时大括号里面是逗号表达式,根据逗号表达式可以得到a数组中元素为1,3 ,5,0,0。p里面存放的是a[0]的地址,a[0]表示第一行的地址,表示首元素地址,也就是a[0][0]的地址,&a[0][0],p[0]相当于*(p+0),得到1。

指针练习(1)_整型

2.

int main()
{
	int a[5] = { 1,2,3,4,5 };
	int* ptr = (int*)(&a + 1);
	printf("%d,%d", *(a + 1), *(ptr - 1));
	return 0;
}

解析:*(a + 1)中的a表示首元素的当址,加1也就是向后访问4个字节,对其解引用就是2

*(ptr - 1)中ptr是数组a向后跳过一个数组的地址,可以参考下图:

指针练习(1)_数组_02

3.

int main()
{
	int a[4] = {1,2,3,4};
	int* ptr1 = (int*)(&a + 1);
	int* ptr2 = (int*)((int)a + 1);
	printf("%x,%x", ptr1[-1], *ptr2);
	return 0;
}

解析:ptr1[-1]也就相当于*(ptr1+(-1)),ptr1里面存放的是数组a向后跳过一个整形数组的地址,减一也就是指向元素4的那个地址。第五行代码中将a的类型强制转换为整型,整形加一就是普通的算术运算,在对其进行强制类型转换为整型指针,指针访问的是4个字节,详细如下图(VS编译器默认是小端存储地址的)

指针练习(1)_逗号表达式_03

指针练习(1)_整型_04

标签:int,练习,ptr1,地址,数组,printf,ptr,指针
From: https://blog.51cto.com/u_16190077/7380062

相关文章

  • 指针与数组
    【1】指针与一维数组定义:eg1:intx[3]={4,5,6};int*p;       eg2:intx=12;  p=&x;                       int*p=x; eg3:表示:地址[]*(地址)序号0 12内容4......
  • 驾校科目一模拟考试练习APP的设计与实现-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,管理系统越来越成熟,各种企事业单位使用各种类型的管理系统来提高工作效率,从而降低手工操作的弊端。我国政府一直以来都非常重视驾校教育的发展,近几年来驾考学生人数逐渐增加,对科目一考试的需求越来越多。因此,通过开发驾校科目一模拟考试练习APP来提高学习......
  • 今天练习element组件的时候,引入element样式和脚本文件以及vue的组件之后,导入简单eleme
    2023-09-04今天练习element组件的时候,引入element样式和脚本文件以及vue的组件之后,导入简单element组件练习之后,查看组件的时候,样式一直出不来,经过我多次排查,终于发现,导入的三个内容是有顺序排序要求的。必须先导入vue,然后再导入其他的两个。<!DOCTYPEhtml><htmllang="en">......
  • 句柄和指针的区别
    句柄和指针是计算机科学中常用的两种数据类型。句柄(Handle)是一个在程序中用来引用对象或资源的标识符。它是一个代表对象的唯一标识符,但本身不直接指向对象的内存地址。句柄可以看作是一种间接引用,通过句柄可以访问和操作对象或资源。句柄一般由系统分配和管理,对应于对象或资源......
  • 智能指针
    智能指针就是帮我们C++程序员管理动态分配(程序员手动删除,手动释放,也就是说智能指针是帮我们操作堆区内存的)的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!unique_ptr创建,初始化1unique_ptr<int>up;2up=make_unique<int>(100); ......
  • C语言-指针
    目录指针行指针多级指针void指针const修饰符指针前置概述:在计算机内存中最小的操作单元是字节Byte(不是位bit)。每一个字节单元,都有一个编号,称为地址。指针定义:专门用来存放地址的变量,称为指针变量,通称指针。格式:<存储类型><数据类型>*<指针变量名>inta=10;int*p......
  • markdown命令练习
    目录设定关于目录的设定markdown最多允许六级目录,若是想设置一级目录在编辑内容前加一个#即可,(注意:#和要编辑的目录之间需要一个空格的空间,否则可能出现识别不出的情况)若是想要做二级目录,将一个#变成两个即可;若是三级,便是三个#。后面以此类推。注意:用此方法时若不在markdow......
  • Python练习:嵌套列表解析,讲3*4的矩阵转换成4*3的矩阵
      1#嵌套列表解析,讲3*4的矩阵转换成4*3的矩阵23matrix=[[1,2,3,4],4[5,6,7,8],5[9,10,11,12]]678forrowinmatrix:9print("遍历每一行:",row)101112print("\n")1314s=[[row[i]forrow......
  • 简单理解c语言指针
    &p(取地址)P*p(间接寻址) 假设p指向整数型变量a,那么可以理解为p等同于a的地址。*是间接寻址运算符,对p进行操作,找到p这个地址中所对应(放的)东西。也就是说,*p就是a。做个比喻,将*理解成取平方,而操作数p是地址,那么p的平方就是a,如2的平方就是4。(不过这里其实p不像是常量而更像变量x,......
  • 《C和指针》学习笔记
    C和指针学习笔记前置条件1.1配置环境下载vscode安装编译器:这里以MinGw-w64为例。下载MinGw-w64的安装包并解压。添加到系统环境编辑tasks.json(该文件负责项目的编译,如果需要同时编译多个文件,需要对该文件进行如下注释内的修改):{"tasks":[{......