数组 :将同类型的同作用的变量,放在一起统一管理,
所有元素,在内存中,都是连续储存的,
数组在声明的时候就需要确定多少个元素,内存空间是一次性开辟成功
使用数组的某一元素,需要使用数组名加下标的方式使用,下标从零开始计数
数组初始化
int arr[5]={0}; arr[0] 数组首地址
数据类型:
基本数据类型
指针类型
枚举类型
指针--> 指针类型变量
*p1=a;
p1=&a;
指针只是一个存储地址编号的变量
指针类型只是普通数据类型之一
*p 间接引用 可以取到或修改 这块内存地址上储存的内容
指针的指针 二级指针 **p1
指针数组 数组中全是指针的数组
加1 , 在数组中移动
加* , 取出对应地址的内容
int a = 2;
int b = 3;
int c = 4;
int * p1 = &a;
int * p2 = &b;
int * p3 = &c;
int * parr[3] = {p1,p2,p3};
for(i = 0 ; i < 3 ; i++)
{
printf("%d\n",**(parr + i));
}
二维数组 a[][] 可看成多个一维数组
Int arr[行][列] == int arr []
Int arr[] 相同列数的 多个一维数组
*(arr+1) 在一个数组中移动,移动了一列 ==arr[0]-->arr[1]
arr 行指针
行指针加* 变成列指针
列指针加& 变行指针
字符串 实现基于字符数组
字符串有有效字符
字符串结束标志:'\0'
声明字符串就是声明一个字符数组
strcmp (arr,brr)==0 比较字符串是否一样
strlen(name1)==strlen(name2) 确定字符串是否一样
strlen(name); 字符串有效位是多少
sizeof(name); name储存宽度
strcat (name1,name2); 将name2接到name1后输出 越界问题 name1储存空间是否够容纳name2
strcpy (str1,str2) 把二拷贝给一
char name[20] = "jack";
int age = 40;
char result[50];
sprintf(result,"姓名:%s,年龄:%d",name,age); 将“”里的内容作为result
printf("%s\n",result);
函数 :
return 函数名(needs) 返回值 函数名 参数需求
void myprintf(); void 不需要返回
Int myprintf(); 返回值为int型变量
形参 :在声明函数时,用来代替真实输入值
实参: 函数调用时,输入的真实值
不需要改变外界的值的时候,传变量本身,也就是赋值 传值
要改变外界的值的时候,传变量的地址。 传址
头文件 包含
aa .c --->aa .h
在.h 文件中 写入函数声明及宏定义
#ifndef _filename_h_
#define _filename_h_
宏定义 #define NAME_LEN 20
函数声明;
#endif
gcc编译器处理步骤:
预处理 -E
汇编 -S
编译 -c
gcc -c a.c -o a.i -o 给新名字
make 编译管理工具
建立makefile文件格式
main:main.o a.o b.o
gcc main.o a.o b.o -o main
main.o:main.c
gcc -c main.c -o main.o
a.o:a.c
gcc -c a.c -o a.o
b.o:b.c
gcc -c b.c -o b.o
变量 : 必须先声明 声明可以多次 ,不开辟空间。 定义只能一次 , 会开辟空间。
后定义
再使用
关键字 : static 静态变量 :生命周期变长,整个程序存续期间都存在 ,值能够保存下来,初始化语句只运行一次
extern 声明外部变量 , 告诉编译器,变量声明在别的文件 ,暂时忽略定义错误,一般用在全局变量上