022day(指针和数组和指向指针的指针)

本文深入探讨了指针与数组的关系,包括数组名作为指针常量的概念、通过指针操作数组元素的方法、如何颠倒数组顺序以及使用指向指针的指针。同时介绍了二维数组的特性,并给出了具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《2017年11月1日》【连续022天】

标题:指针和数组和指向指针的指针;

内容:A.观看MOOC8.5,9.1;

            B.(a).指针与数组:数组的名字是一个指针常量,指向数组的起始地址;

T a[N]:     a的类型是T*;可用a给一个T*类型的指针赋值;a是常量,不能赋值

作为函数形参时,T*p 和 T p[ ]等价;

例: int a[200]; int*p;
p=a; //让p指向数组a的起始地址a[0]; 
*p=10;  //让a[0]=10; 
*(p+1)=20;  //让a[1]=20; 
p[0]=30;   //让a[0]=30 ; p[i]等效于*(p+i); 
p[4]=40; 
for(int i =0;i<10;++i)
*(p+i)=i;     //对a数组的前10个元素进行赋值; 
++p;      //让p指向a[1]; 
cout<<p[0]<<endl; 
p=a+6;    //p指向a[6;] 
cout<<*p<<endl;
return 0;

例2:void Reverse(int*p,int size){  //颠倒一个数组 
for(int i=0;i<size/2;++i){
int tmp =p[i];
p[i] =p[size-1-i];
p[size-1-i]=tmp; 
    }
}
int main()
{
int a[5]={1,2,3,4,5};
Reverse(a,sizeof(a)/sizeof(int));
for(int i=0;i<5;++i){
cout<<*(a+i)<<",";

运行结果:

注明:以前提及函数中,形参是实参的拷贝,形参的改变不会影响实参;但数组特殊,其实质:将数组看作指针,经过函数后,其指向的地址不变,但内容发生了改变;

故形参依旧是实参的拷贝;

              (b).定义二维数组:T a[m][n];

a[i]是一个一维数组(其中i是整数);a[i]的类型是T*;sizeof(a[i]) =sizeof(T)*N

a[i]指向的地址: 数组a的起始地址+i*N*sizeof(T)

应用上面的颠倒函数:

例:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Reverse(a[1],4);
for(int i=0;i<=2;++i){
for(int j=0;j<=3;++j)
cout<<a[i][j]<<" ";
}
Reverse(a[1],6);
cout<<endl;
    for(int i=0;i<=2;++i){
for(int j=0;j<=3;++j)
cout<<a[i][j]<<" ";
}

可见,因为二维数组的数据是连续存放的,当超出a[1]时,函数会调用后面的数据,即a[2];

指向指针的指针:

定义:T ** p;

p是指向指针的指针,即p指向一个类型为T*指针的地方;*p 的类型为 T*;

实际运用:

        int **pp; //指向int*类型指针的指针
int*p;
int n=1234;
p =&n; //p指向n 
pp =&p;  //pp指向p
cout<<*(*pp)<<endl; //*pp是p,*(*pp)是n 

明日计划:学习指针与字符串;

 

 

 

 

内容概要:本文详细介绍了Rust在系统编程中的应用,包括基础知识、核心技术及开发流程。首先阐述了Rust语言的基础及环境搭建,强调了其强类型系统现代语法。接着深入探讨了所有权机制与内存安全,指出Rust通过所有权系统确保内存安全,避免悬垂指针内存泄漏。再者,讲解了Rust的并发编程模型,通过消息传递无数据竞争的线程模型实现安全并发。此外,讨论了Rust在底层硬件访问与嵌入式开发中的应用,展示了其在资源受限平台上的适应性。随后,介绍了系统调用与内核模块开发,说明了Rust如何调用操作系统底层API并实现与现有内核代码的无缝集成。还提及了性能优化与调试技巧,如使用编译器优化选项工具链支持。最后,通过实战项目案例解析社区资源展望,展示了Rust在系统编程领域的潜力发展前景。; 适合人群:有一定编程基础,尤其是对系统编程感兴趣的开发者,包括操作系统内核开发、驱动程序编写、嵌入式系统开发等领域的工程师。; 使用场景及目标:①学习Rust语言的基础知识环境搭建,掌握强类型系统现代语法;②理解所有权机制与内存安全,避免传统系统编程中的常见错误;③掌握并发编程模型,实现安全高效的多线程操作;④了解底层硬件访问嵌入式开发,适应资源受限平台;⑤掌握系统调用与内核模块开发,实现与现有系统的无缝集成;⑥学习性能优化与调试技巧,提高系统软件的运行效率稳定性;⑦通过实战项目案例解析,掌握系统编程的实际应用。; 其他说明:Rust作为系统编程的新选择,不仅提升了传统系统软件的安全性,还通过现代语言特性工具链优化了开发效率。开发者应充分利用Rust的特性,构建更加健壮、高效的系统软件,迎接未来计算机领域的新挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值