C-二维数组, 字符串, 指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-二维数组, 字符串, 指针相关的知识,希望对你有一定的参考价值。

常用的三种数组初始化:
int arr[][4] = {{元素}, {元素},{元素},{元素}};
 
 
二维数组本质:
每个元素是一维数组的特殊一维数组;
 
 
二维数组与函数:
1. 同一维数组一样, 当作为函数参数的时候, 函数的内部与数组对应的其实是一个指针
2. 所以在作为函数参数的时候, 需要同时传入行, 列
3. 在形参中的二维数组, 行数可以省略, 但是列数不能省略, 实参中对应的二维数组, 行数可以任意, 但是列数必须保持一致
void test(int rows, int cols, int arr[][cols]);
 
 
字符串:
%s的原理,  占位的时候, 直接对应的并不是字符串数组的值,  因为数组名默认代表的是数组首地址,  所以其实对应的是字符串数组的地址
 
 
字符串长度:
不能直接sizeof数组长度
普通方法: 从第一个字节开始计数, 直到遇到’\0’为止
 
 
字符串常用函数:
6个
 
 
上课笔记:
指针:
1. 变量在内存中的存储
1. 不同的变量在内存中占据不同的字节空间
2. 内存当中存储数据最小基本单位:字节, 每一个字节, 都有对应唯一的 地址 ——一个十六进制的数
3. 声明一个变量, 在内存中, 从高字节向低字节分配连续的指定字节数的空间
4. 任何数据在内存中都是以其二进制补码形式存在的, 由低位存到高位存储
5. 变量的值: 变量中存贮的值
6. 变量的地址: 变量的低字节的地址
2. 指针变量
1. 首先它是一个变量
2. 其次它是一个存放地址的变量
3. 然后它存放的是另一个变量的地址
4. 通过这个地址就可以间接的访问另一个变量
5. 声明的时候, 可以把数据类型 和 * 写在一起  int* p1      不要 int *p1(到了后期熟练了随意)
6. 所以不能把一个非地址类型的常量赋给指针
    也不能直接把变量赋值给指针
7. 指针变量智能存储和指针变量类型相同的普通变量的地址, 否则会出问题
 
 
指针变量作为函数的参数:
1. 为什么要用?: 函数的返回值return只能有一个, 但是很多时候需要函数返回的不止一个值,  这时候, 可以通过定义指针变量作为形参,  通过指针实现地址的传递,  从而直接对形参进行操作,  可以获得多个返回值
2.  通过指针变量, 函数可以不需要值的传递, 而只需地址的传递,  甚至连返回值都不需要,  就可以实现对实参的修改 
 
一点建议:  以后如果需要在函数中使用数组作为参数的时候,  直接写一个指向数组的指针最好
 
下标(索引)的本质:
1. 指针变量后面可以使用中括弧, 在中括弧中写上下标可以来访问数据
2. p1[n], 完全等价于 *(p1+n),  前提是p1必须是一个指针
3. 只要是指针, 都可以使用中括弧下标

以上是关于C-二维数组, 字符串, 指针的主要内容,如果未能解决你的问题,请参考以下文章

C语言指针指向一维数组与二维数组?

C语言指向二维数组的指针

C语言中二维数组名是否可以看作指针数组名?

C 语言二级指针案例 ( 字符串切割 | 返回 二维数组 作为结果 )

关于c语言二维数组列指针初始化

C语言中关于二维数据指针的问题?