首页 > 学院 > 开发设计 > 正文

初学Linux(二)---Linux下C语言中的数组与指针

2019-11-08 19:53:37
字体:
来源:转载
供稿:网友

初学linux(二)—Linux下C语言中的数组与指针

在经过阶段一的linux学习之后,我来到了阶段二的Linux下的C语言编程,虽然学到目前linux下的C语言似乎跟之前学的C语言所差无几,但是按照老师的话来说,C语言指针这块尤为重要,而我在这一方面的学习也不够透彻,本文就写写C语言中数组与指针的关系与一些使用的例子。

一、数组与指针的存储原理

按照林世霖老师的说法,数组和指针的存储机制是一样的,只是存放的东西不同。所以我就按照老师的思路写。 如果按照种菜来举例,数组和指针只是种的菜不同。一个是放数据(int float…),一个放地址。下面举三个例子说明他们的存储。 例1: int a[3] ; 挖三个坑(申请三块内存)紧挨着的,里面存放int类型的数据。 这里写图片描述 例2: int b[2][3]; 可看成 int (b[2]) [3] 先挖两个坑,一个坑存放三个int型数据。 这里写图片描述 例3: int *p[3] []优先级更高 所以先申请三块内存,存放地址 这里写图片描述 总结:里面放什么取决于第二部分

继续举例子 一、 Int a; Int *p; 指针放地址 ; 把a的地址赋给p p=&a; p等于a的地址 于是p也可以间接使用a *p则是a的值 即 =a; 二、 int *(*q); 也是跟之前的一样 ,先申请一块内存 然后第二步,存放的东西是什么 是一个指针的地址 如果要放 int a 的地址 ,那就是错的 放int *p的地址 ,那就可以,很合适 三、 int *k[3] 等于 int (*k)[3] *k第一部分 申请一块内存 放地址 放int a[3]的地址 k=&a;

当然,指针也可以指向函数 。 例: int func(char a); int (*p)(char a); p=&func;

二、数组的一些使用

1、自适应

比如我一开始定义了 int a[] ={1,3,4,5}; 我希望他全部打印出来,但是我又不清楚他有多少个。 这时候就要使用 for(i=0;isizeof(a)/sizeof(a[0];i++) { … } 也称为自适应。

2、数组的复制

int a1 [3]={1,2,3); int a2 [3]={4,5,6); a1=a2; 这条语句是错误的 ! 任何数组都不能直接赋值。 但是我们至少有两种方法可以赋值 一种是一个一个来 。比如a1[0]=a2[0]; 第二种是使用memcpy函数 memcpy(a1,a2,sizeof(a2));这句话是将a2正块内存复制到a1

3、字符数组

char s1[10]={‘a’,’b’,’c’}; char s2[10]={“abc”}; char s3[10]=”abc”; char s4[10]={‘a’,’b’,’c’,’/0’}; 注意了,s2等于s3,s1不等于s2 ,因为s2和s3有‘/0’ ,s2等于s4 。 还有 char s5[3]=”abc”; 是越界!!

4、关于数组的地址

int a[3]

1,直接用数组取址,代表整个数组的地址,&a 2,数组名代表其首元素的地址 a ==》&a[0] 3,这张图说明了数组地址存放

数组地址原理图 4,调用函数把数组作为实参,实际上是指针的使用 传首元素的地址,这里不详细讲解。 这里写图片描述

这里写图片描述

三、扩展

1指针的大小固定为四个字节。 2数组的刚开始的地址称为基地址。 3coast的使用

第一行和第二行效果相同 这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表