C学习笔记(十一)数组认知
2016-07-20 19:53
155 查看
一.一维数组
1.1定义初始化遍历
整型数组
字符数组
1.2数组名的作用(指针常量) 数组首元素的地址
1.2.1 array 与& array 的区别
&a 对一维数组的数组名取地址等于数组的地址
*(&a) 对一维数组的地址取值等于数组首元素的地址
1.2.2数组指针
数组指针定义与初始化
数组指针是一个指针变量,这指针指向一个数组
int (*pa)[3] = &a;
数组指针的作用 :保存数组的地址
传一维数组的地址 用数组元素指针来接
传二维数组的地址 用一维数组指针来接
传一维数组的地址 用二维数组指针来接
void print_ptr(char ptr[100]) // vod print_ptr(char *ptr)
void print_ptr(char src[3][100]) //void print_ptr(char (*src)[100])
二.二维数组
1.1定义初始化遍历
整型数组
字符数组
char src[3][100];
scanf(“%s”,src[i]); // scanf(“%s”,*(src+ i));
1.2数组名的作用(指针常量)首个一维数组的地址
1.2.1 *(*(array)+ i)+ j )如何理解
array)+ i 第i + 1 个一维数组的地址
*(array)+ i) 第i + 1 个一维数组的首元素的地址
*(array)+ i)+ j 第i + 1 个一维数组的第j + 1个元素的地址
*(*(array)+ i)+ j ) 第 i + 1 个一维数组的第j + 1个元素的值
1.2.1指针数组
指针数组定义与初始化
int i;
for(i = 0; i < 3; i++)
{
pa[i] =(int *)malloc(sizeof(int));
scanf("%d",pa[i]);
printf("pa[%d] = %d\n",i,*(pa[i]));
}
指针数组的作用
int main(int argc,char *argv[]);
argc 命令行参数的个数
argv[] 保存命令行参数
\\可用于函数入口参数检查
if(argc != 2)
{
printf("Please input one param!");
}
ps: void printf_ptr(char **ptr)
传指针数组或指针的地址 用指针的指针来接
三.数组的复杂声明
3.1左右法则
3.2复杂指针声明:int *(*(*fp1)(int))[10];
四.指针和数组的区别
空间分配: 数组的空间时静态分配的,分配的空间是连续的;指针是动态分配内存空间,不连续分配空间
访问效率:数组是直接访问,访问效率高 ,而指针属于间接访问,访问效率低
安全性:数组可能会引起数组越界,指针会可能会因为是野指针引起内存泄漏
函数形参:数组的函数形参为:元素指针或是 数组指针 指针函数形参:指针的指针
处理:数组偏向于地址的处理,指针偏向于值得处理
1.1定义初始化遍历
整型数组
字符数组
1.2数组名的作用(指针常量) 数组首元素的地址
1.2.1 array 与& array 的区别
&a 对一维数组的数组名取地址等于数组的地址
*(&a) 对一维数组的地址取值等于数组首元素的地址
1.2.2数组指针
数组指针定义与初始化
数组指针是一个指针变量,这指针指向一个数组
int (*pa)[3] = &a;
数组指针的作用 :保存数组的地址
传一维数组的地址 用数组元素指针来接
传二维数组的地址 用一维数组指针来接
传一维数组的地址 用二维数组指针来接
void print_ptr(char ptr[100]) // vod print_ptr(char *ptr)
void print_ptr(char src[3][100]) //void print_ptr(char (*src)[100])
二.二维数组
1.1定义初始化遍历
整型数组
字符数组
char src[3][100];
scanf(“%s”,src[i]); // scanf(“%s”,*(src+ i));
1.2数组名的作用(指针常量)首个一维数组的地址
1.2.1 *(*(array)+ i)+ j )如何理解
array)+ i 第i + 1 个一维数组的地址
*(array)+ i) 第i + 1 个一维数组的首元素的地址
*(array)+ i)+ j 第i + 1 个一维数组的第j + 1个元素的地址
*(*(array)+ i)+ j ) 第 i + 1 个一维数组的第j + 1个元素的值
1.2.1指针数组
指针数组定义与初始化
int i;
for(i = 0; i < 3; i++)
{
pa[i] =(int *)malloc(sizeof(int));
scanf("%d",pa[i]);
printf("pa[%d] = %d\n",i,*(pa[i]));
}
指针数组的作用
int main(int argc,char *argv[]);
argc 命令行参数的个数
argv[] 保存命令行参数
\\可用于函数入口参数检查
if(argc != 2)
{
printf("Please input one param!");
}
ps: void printf_ptr(char **ptr)
传指针数组或指针的地址 用指针的指针来接
三.数组的复杂声明
3.1左右法则
3.2复杂指针声明:int *(*(*fp1)(int))[10];
四.指针和数组的区别
空间分配: 数组的空间时静态分配的,分配的空间是连续的;指针是动态分配内存空间,不连续分配空间
访问效率:数组是直接访问,访问效率高 ,而指针属于间接访问,访问效率低
安全性:数组可能会引起数组越界,指针会可能会因为是野指针引起内存泄漏
函数形参:数组的函数形参为:元素指针或是 数组指针 指针函数形参:指针的指针
处理:数组偏向于地址的处理,指针偏向于值得处理
相关文章推荐
- C++\C指针作为参数
- 经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现
- 使用UUID可以产生一个号称全球唯一的ID
- Date(have a date)
- 第 45课:神速Spark的新解析引擎catalyst
- 【BZOJ2049】[Sdoi2008]Cave洞穴勘测
- 欢迎使用CSDN-markdown编辑器
- poj3461 KMP算法(字符串匹配)
- 杭电-4548 美素数 (打表)
- C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法:
- Key-Value键值存储原理初识(NOSQL)
- HDU 3586 Information Disturbing 树形DP+二分
- CentOS 7下MySQL 5.7安装、配置与应用
- Android Espresso Test UI
- ubuntu12.04中cuda6.5的安装与测试(笔记本&双显卡)
- HDU 5724 Chess(2016 Multi-University Training Contest 1的1002题)
- 希腊字母读法
- linux bus driver device 三者关系
- UVA 784 Maze Exploration
- 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber