C学习笔记(十一)数组认知

一.一维数组

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];

 

四.指针和数组的区别

空间分配: 数组的空间时静态分配的,分配的空间是连续的;指针是动态分配内存空间,不连续分配空间

访问效率:数组是直接访问,访问效率高 ,而指针属于间接访问,访问效率低

安全性:数组可能会引起数组越界,指针会可能会因为是野指针引起内存泄漏

函数形参:数组的函数形参为:元素指针或是 数组指针  指针函数形参:指针的指针

处理:数组偏向于地址的处理,指针偏向于值得处理

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值