打印二维数组
矩阵打印:
for (int i = 0; i < 2; i++)
{
for (int j=0; j < 3; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
外循环打印列,内循环打印行。
二维数组地址问题:
(int)arr[] ;十进制的地址显示,第一行(int)arr[0][0],二者一样,因为二维数组的首元素为一个一维数组名,一维数组名本身就是一个地址,不用加&。每行相差一行的内存(字节数*列数);访问单个元素的地址,需要使用&取到具体地址
函数的分文件书写
“”表示自己写的头文件
指针函数数组的应用:
指针
1.x32位操作系统指针占用4个字节x64位下占8个字节(不管什么数据类型):因为存地址
2.左上角debug调速器x84采用的是32位的
3.空指针:指针变量指向内存中编号为0的空间,初始中使用,一开始你不知道指向哪(空指针的指向的内存,没有权利访问,0-255,0和255为系统占用)写入访问权限冲突
(汇编的知识中,因为里面存在很多中断例程,一旦里面的内容被改变,中断例程可能无法运行,严重的会直接导致系统崩溃。)
4.野指针:指向非法内存空间 (int *)转变指针 ,尽量避免使用,就是你把数字或者字符直接赋予给指针。因为这个数字或者字符你没申请空间,int a=10;这是合法的申请了内存所以可以
但是 *p= (int *)0x11110;不合法。不可以,会报错。
5.const 修饰指针(常量指针:类似数据类型)const int * p=&a 指针的指向可以修改,但是指针指向的值不可以修改,(理解:表面上你修改了指针的值,其实你修改的是他的地址,指向的地址不同,
对应的值也可能不同ps 除非两个变量都是10,一样大。所以修改的实际语法从此处而来: *p=20;不可以*p是所指向变量的值,不可修改。p=&b;(正确,修改的p指向的地址
对应了b的值)但是修改 a或者b还是可以滴,指向的变量自己改变了,但是地址没变,在int 开辟的空间0-255中可以随意修改。
const在指针中的用法与注意点:
1.const 固定常量(指针常量) int * const p =&a; const p 规定常量p, *()为指针,指针指向的值可以改,但是指针指向不可以改,const后面跟的事变量===表示一个常量
*p=20;正确::::常量指针不改量,指针常理不改针 (const 后面 * 固定了指针)(const 后面 p(变量)固定的常量),固定了谁谁可以变。否则不可以。
2.const 修饰常量 const int * const * p (都被固定嘞)就都不能改了 const 翻译为常量
看const位置和*的位置 判断 const int * p (常量 int 指针 p);int * const p :( int 指针 常量 p)
3.数组中数组名就是数组的首地址
函数数组与指针的应用
1. int *p =&a; p++;(让p的地址先后偏移4个字节ps32位)
2.当数组名作为参数传入到函数里面时,此时通过sizeof(数组名)查看到的事指针的长度,而不是数组中元素的个数,即函数无法算处数组的长度,传入后里面的内部操作就和
数组操作一样了 arm[i]****都是可以的