当前位置:   article > 正文

努力学习嵌入式的第十三天——指针如何操作一维整型数组和一维字符数组

努力学习嵌入式的第十三天——指针如何操作一维整型数组和一维字符数组

调试:

明确问题
定位问题--逻辑
//加打印---核心数据打印出来
printf("—--isLeapYear --- %d\n" ,ret);

回顾

1.指针概念

a.指针----地址----内存单元编号

b.指针----数据类型----指针类型

指针是指一个变量的地址,通过变量的地址″指向″的位置找到变量的值,这种″指向″变量地址可形象地看作″指针″。用来存放指针的变量称为指针变量,它是一种特殊的变量,它存放的是地址值。

  不同说法:

                 定义一个指针?就是定义一个指针变量

                 打印某个变量的指针?打印的是一个地址

2.指针变量的定义

基类型 *变量名

a.基类型:数据类型  基本数据类型  数组类型  指针类型

b.*  //定义时侯的*表示定义的是一个指针类型的变量

c.变量名

eg.

int a,b,*p,*q;     //

int *p,q;     //

注意:

1.指针变量的大小:64位(八个字节)  32位(4字节)

2.指针类型----存储的是地址这种特殊数据

指针变量的给值:

int *p;       //野指针------值的是随机值----被当做了地址

*p的执行顺序:

step1.拿p中的地址 到内存中定位

step2.从定位中开始 偏移基类型大小的一块空间sizeof(基类型)

step3.被当了基类型的变量来看

3.核心用途

被调修改主调

修改:

a.修改谁  就传递谁的地址

b. *p(间接访问)

一、指针+一维整型数组

int a[10];

定义类型: int *p=a;

//1.数组本身的特点连续性,单一性,有序性

//2.p+1   --------偏移了一个基类型

通过指针访问到数组元素

*(p+i)<==> int 型的变量  <==> a[i] <==> p[i] <==> *(a+i)

指针运算

&

*

p+1  //指向了下一个基类型数据

p++

p-1

p--

关系运算

>  >=  <  <=  ==  !=

p-q  前提:同一类型的指针才行

p+q:注意:指针不能做加法运算

快速排序

加上一个结束条件

指针操作一维字符型数组

char s[ ]="hello";

char *p=s;     //s 数组名---代表数组首元素的地址

                       //a[0] ----->类型是char型
                       //&s[0]----->表示char * 的地址

const

只要一个变量前用const来修饰,就意味着该变量里的数据只能被访问,而不能被修改,也就是意味着“只读”

const  int  *p = &a  //表示基类型为只读

  1. int a,b;
  2. const int* p=&a;
  3. p=&b; //正确
  4. *p=2; //错误 该指针p可以再指向其他对象,但是不能修改对象的值;

//可理解为const修饰的是指针指向对象的值;

//const 就近原则  里谁近就限定谁。

int  *const  p=&a ;        //限定p为只读

  1. int a,b;
  2. int* const p=&a;
  3. *p=10;//正确;
  4. p=&b;//错误,该指针不能改变指向对象,但能修改已指对象的值;

//可理解为const修饰的是指针本身;

const  int  *  const  p=&a ;  //p不能被修改 指向的目标类型不能被修改

                                              //(不能通过*p来修改)

//既不能修改指向对象,也不能修改已指向对象值;

int puts (const char *s);  

{

         //const  char *s-----在函数里面  并不能通过*s修改到外面的数据

}

好处:

1.可以接受字符数组名      //char   *

也可以接收字符串常量     //const   char   *

提高了参数的适用性

2.避免了可能出现的修改的操作 可以将运行时的错误,提前到编译时发现

const  char *p可以用来保存字符串常量的地址

总结:

1:可以用来修饰变量,修饰函数参数,修饰函数返回值,且被const修饰的东西,都受到强制保护,可以预防其它代码无意识的进行修改,从而提高了程序的健壮性

2:使编译器保护那些不希望被修改的参数,防止无意代码的修改

3:增强代码的可读性

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/951427
推荐阅读
相关标签
  

闽ICP备14008679号