C语言学习:数组和指针。

张开发
2026/4/13 21:32:07 15 分钟阅读

分享文章

C语言学习:数组和指针。
经过了7-8天的学习我已经学完了C语言函数和数组的部分这两部分是C语言重点中的重点几乎所有底层开发、高效程序、数据结构都离不开它们。gitee仓库地址https://gitee.com/dtq0424/c-language-learning.git一.数组基础1.数组的定义和初始化(1)数组的定义变量类型后面加个方括号[]就是数组。ex:int arr[5];(2)初始化 1完全初始化int a[5] {1,2,3,4,5}; 2部分初始化其余部分为0int a[5] {1,2}; 3省略长度自动计算int a[] {1,2,3};2.注意要点: 1.下标从0开始。 2.数组名是元素首地址。3.数组的内存是连续存放的。3.常用操作: 1.遍历for(int i 0;i n;i); 2.求长度sizeof(arr)/sizeof(arr[0]) 3.输入输出输入输出各一个循环。二.二.二维数组1.定义int a[2][3];2.存储行优先存储先存第一行在存第二行。 示例如下3.初始化1int a[2][3] {{1,2,3},{4,5,6}}; 2int a[2][3] {1,2,3,4,5,6};4.1可将二维数组看成二维矩阵。 2二维数组的数组名是二维数组中第一行第一个元素的地址。三.字符串和字符数组1.字符数组:char str[size];2.初始化字符数组:方式1char str[] hello world; //551112数组的大小被默认初始化为12不要忘了\0字符。方式2char str[size] {h,e,l,l,o};3.为什么不规定数组大小? 普通数组再进行初始化的时候有一种情况是它会根据后面初始化的内容确定数组大小。四.字符串操作需要头文件string.h1.strlen:求字符串的长度到\0停止不含\0。2.strcmp(a,b):strcmp(a,b); :字符串比较,用字典序的比较方式,从头到尾一次性比较。ex字符串10和9相比109,因为19 。3.strcpy(a,b);:字符串拷贝,将后面的字符串拷贝到前面的字符数组中。4.strncmy(a,b,n);和strncpy(a,b,n);:安全的字符串比较和安全的字符串拷贝。 安全内存安全避免内存越界。5.memcpy(a,b,n);: 内存拷贝,将n个字节的数据从b拷贝给a。6.memcmp(a,b,n);:内存比较,比较a和b前n个字节。7.memset(str,c,n);:内存设置,将str所指向的内存接下来的n位字节都改成c值。示例如下(头文件stdio.h和stdlib.h没截上)五函数和数组1.数组做函数参数void fun(int a[], int n) { ... } 注意传递的是地址修改应参会改变实参数组必须传递额外长度int n)。六.常用算法遍历与求和求最值冒泡排序选择排序数组插入删除元素查找。七.地址1.每个字节都有一个地址取地址符。代码示例如下2.计算机的内存地址经常用十六进制表示。八.指针基础1.指针变量也是变量存储的是地址。2.定义int a; int *p a; //*p:指针变量存储的是某个整数的地址。3.指针变量算几个字节32位系统占4个字节64位系统站8个字节。4.两个核心运算符1 取地址运算符变量-地址 2*取值运算符地址-变量值代码示例如下5.空指针与野指针1空指针NULL不知向任何有效地址 2野指针指向无效 / 已释放内存的指针高危6.指针在取值的时候取得就是对应的数据类型针在取值的时候取出几个字节的数据和内存中存储什么样的数据没有关系。7.大小端大小端大端 - 数低 - 高小端 - 数低 - 低九.指针与数组1.数组名是首元素地址常量。2.指针访问数组*(pi) arr[i],指针偏移p1,p-1。3.指针数组和数组指针1指针数组int *p[5] - 存放指针的数组。 2数组指针int(*p)[5]-指向数组的指针。十.动态内存管理1.malloc动态申请一段内存空间。(在堆区中)2.calloc动态申请一段内存空间初始化值为0。3.free函数释放动态申请的空间。4.memset:设置每个字节为1个固定值。5.memcpy内存数据拷贝。6.memmove同memcpy,能处理空间有重叠的情况。代码示例如下十一.指针与const1.const int *p指向的值不可改。 2.int * const p指针本身不可改。代码示例如下十二.应用场景链表实现动态数组回调函数数据结构嵌入式开发等等。十三补充typedef关键字变量名变成类型别名。代码示例如下

更多文章