嵌入式每日学习心得2017.07.20

变量:程序语言对存储单元的抽象


(1)变量名(name) 标识
(2)地址(address) 存储位置
(3)大小(size) 存储空间
(4)类型(type) 值域和运算集
(5)值  (value) 内容
(6)生存期(lifetime) 存在的时段
(7)作用域(scope) 作用范围




地址:
    内存中,每个字节都有一个编号,称为地址。


指针变量:
    在C语言中,内存单元的编号称为指针,用来存放地址的变量,称为指针变量




数组


1.数组的定义:
具有一定顺序关系的、相同数据类型的元素的集合。存放在一片连续的内存空间。


2.数组分类(按维数分:)
一维数组:a[9]
二维数组:a[i][j]
一维数组构成的数组,按行i存储的
多维数组:a[i][j][k]...


int a[200]={1,2,3,44,3,5};


3.数组的赋值方式:
(1):在定义时一起赋值
a[200]={1,2,3,4,5};
等效 a[]={1,2,3,4,5};
       
a[2][2]={1,2,3};
等效 a[2][2]={{1,2},{3}};
等效 a[][2]={{1,2},{3}};


    定义数组时赋值,一维数组的空间大小可以省略


(2):在定义后逐个赋值




4.指针和数组:
(1)数组名就是数组首元素的指针(它是一个指针常量)
(2)数据元素的指针
(3)指针数组


int a[200]


a[0]  a  




5.数组的访问:
(1)下标法:a[i][j]
(2)指针法:*(*(a+i)+j)
(3)混合法:*(a[i]+j)


注意数组名和下标运算符的意义


数组中的元素和单个变量是一样的


数组不要越界访问!!!!
int a[10];
a[10]     //两个10的意义,不一样


字符串(String):
    一串字符,即若干个字符构成的一个序列
    
    C语言中没有字符串类型,只能用字符数组表示字符串,为了方便对字符串的处理,C语言提供了很多简化写法


    C语言规定,一个合法的字符串的最后一个字符必须为'\0',即'\0'为字符串结束标志


    在执行标准输入(比如调用scanf或getchar)时,我们键入的字符在我们按下回车键后会进入标准输入缓冲区中,scanf这些函数只是从这个缓冲区中取走相应类型的数据,如果调用函数时这个缓冲区中没有任何数据,这些函数会等待用户按键输入;如果缓冲区中有数据,但不是scanf函数所期望类型的数据,那么scanf函数就会立即失败返回,否则会直接取走相应的数据,不会等待 




字符数组
1.字符数组:
    数组中元素的是字符类型。


2.初始化方式:
(1)逐个赋值
    char ch[6];
ch[0]=H;
ch[1]=e;
ch[2]=l;
ch[3]=l;
ch[4]=o;
ch[5]=\0;


(2)用字符串常量赋值
    char ch[6]={"Hello"};
    char ch[6]="Hello";
    char ch[]="Hello";


3.输出方式:
(1)输出逐个字符  %c
(2)输出整个字符串 %s


4.与字符串处理相关的函数
#include <string.h>


strcpy(字符串拷贝) 
strncpy(字符串拷贝,可以指定要拷贝的字节数)
strcat(字符串连接)
strlen(求字符串长度,不包括'\0')
strcmp(比较两个字符串的大小,按字典顺序,大小写敏感), strncmp(比较两个字符串开头的部分的大小,大小写敏感)等


注意:
     strcpy,strncpy,strcat这些函数很危险,它们不会检查越界访问(只认‘\0’),这个工作由调用者负责,一要保证目标缓冲区(Buffer)大小充足


缓冲区(Buffer):一块内存空间


数组分赃
int a[4][3][2][2]={1,2,3,4,5,6,7,8};


4*3*2=24 个元素


a[0]:  3*2=6 个元素


a[0][0] : 2 个元素


{{{1,2},{3,4},{5,6}},{7,8},{},{}}


a[0]: 3*2*2
a[0][0]: 2*2
a[0][0][0]: 2


指针与数组
1.指针数组
    指针的数组,数组中的元素,是指针变量。
int* a[5];


<数据类型*>  <变量名>
int* a


2.数组指针
    数组的指针,占4个字节,指向一个数组。
int (*a)[5];

<数据类型>  <变量>  



int a[i][j][k]  int a[][j][k]={1,2,3}
int (*a)[j][k]


3.指针的指针
    指向指针(地址)的指针变量。
int **p;


4.const与指针
(1)常量指针:指针指向的是常量。
地址指向的内容,不可改;存放的地址,可以改。
const char* p  <==>  char const *p
   
(2)指针常量:指针本身是常量。
地址指向的内容,可改;存放的地址,不可改。
char* const p=??? //必须在定义时,就初始化(存放地址)


(3)常量指针常量:指针本身是常量,它指向的也是常量
const char* const p;


记忆方法:
const :常量
 *   :指针
去掉 <类型char> 和 <变量名p>,再读




数组在函数与函数间的传递
(1)复制传递
int zmx(int a[],int size)


(2)地址传递
int zmx(int *a,int size)


注意:
     复制传递和地址传递,只是形参的说明形式不同;数组名实际上,也是一个指针变量。因此,两种方式,效果完全相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值