/bin 二进制可执行文件目录;系统所需要的那些命令位于此目录,比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。
/dev 设备文件存储目录,比如声卡、磁盘等。
/etc 系统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件。
/home 普通用户家目录默认存放目录,保存该用户的所有数据和配置文件。
/root Linux超级权限用户root的家目录。
#include
#include
int main(int argc, const char *argv[])
{
int x=0,y=0,z=0;
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
z=100-x-y;
if(15*x+9*y+z==300)
{
printf("公鸡=%d 母鸡=%d 小鸡=%d\n",x,y,z);
}
}
}
return 0;
}
#include
#include
int main(int argc, const char *argv[])
{
int x=0, y=0, z=0;
for (int k = 0; k <= 3; k++){
x = 4 * k;
y = 25 - 7 * k;
z = 75 + 3 * k;
printf("公鸡=%d 母鸡=%d 小鸡=%d\n",x,y,z);
}
return 0;
}
#include
#include
int main(int argc, const char *argv[])
{
int n = 0,i = 0,j = 0,m = 0;
printf("请输入需要打印的金字塔层数>>>");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(m=i;m
指针概念
指针就是地址
指针变量也是变量,值也会存储地址(这个变量的首地址),指针变量也是有地址;
如果一个指针存储着另外一个指针的首地址,叫做多级地址;
定义
数组类型 *指针变量名;
*的作用:
1.乘法
2.通配符,任意 rm *.c
3.在定义指针变量时,是声明的作用;
4.在使用时,* 解引用符
大小
大小固定,与指针的数据类型无关
64位 8byte
32位 4byte
指针类型的意义:
1.指针的类型决定了指针走一步走多远(指针的步长)
2.指针类型决定了对指针解引用的时候能操作几个字节
1. 指针类型决定了对指针解引用的时候能操作几个字节
2. char *p;*p能访问一个字节
3. int *p;*p能访问四个字节
4. double *p; *p能够访问8个字节
2.指针类型决定了:指针走一步走多远(指针多长)
1. int *p;p+1–>4个字节
2. char *p;p+1–>1个字节
3. double *p;p+1–>8个字节
野指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
1、指针变量中的值是非法内存地址,进而形成野指针
2、野指针不是NULL指针,是指向不可用内存地址的指针
3、NULL指针并无危害,很好判断,也很好调试
4、C语言中无法判断一个指针所保存的地址是否合法
注意: 指针的数据类型要与指向的变量的数据类型保持一致
段错误总结
1.数组越界
2.空指针的间接访问
3.野指针的间接访问
4.通过指针变量修改常量
指针与一维数组
格式: 数据类型 * 指针变量名 = 数组名; 注意: 数组名是数组的首地址,所以数组名字也是常量
指针运算
指针是变量,所以指针是可以进行运算
指针存储的是变量的地址,对指针进行计算,其实就是对地址就行计算
指针每一次递增(递减),表示指针指向下一个(上一个)元素的存储单元
注意:
这个运算不会影响内存中元素的实际值
指针在递增或递减时跳跃时的字节数取决于指针所指向变量数据类型的长度(int 4个字节 char 1个字节)
指针访问数组
1.通过指针的间接访问 2.通过数组下标进行访问
注意:地址是常量,常量不可以自增。
指针与数组的区别
指针 | 数组 |
保存数据的地址,任何存入指针变量 p 的数据都会被当作地址来处理 | 保存数据,数组名 a 代表的是数组首元素的首地址,&a 是整个数组的首地址 |
间接访问数据,首先取得指针变量 p 的内容,把它当做地址,然后从这个地址提取数据或向这个地址写入数据。 指针可以以指针的形式访问(p+i)也可以以下标的形式访问 p[i]。但其本质都是先取 p 的内容后加上sizeof(类型)字节作为数据的真正地址 | 直接访问数据,数组名 a 是整个数组的名字,数组内每个元素并没有名字。只能通过"具名+匿名"的方式来访问其某个元素,不能把数组当一个整体进行读写操作。数组可以以指针的形式访问(a+i),也可以以下标的形式访问a[i]。但其本质都是 a 所代表的数组首元素的首地址加上sizeof(类型)字节来作为数据的真正地址 |
通常用于动态数据结构 | 通常用于存储固定数目且数据类型相同的元素 |
需要 malloc 和 free 等相关的函数进行内存分配 | 隐式分配和删除 |
通常指向匿名数据 | 自身即为数组名 |
指针数组(数组每个元素都是指针)
指针数组:存储指针的数组,
格式: int *p; int arr[4]
数据类型 * 数组名[容量]
数组指针(指向整个数组的指针)
数组指针:指向整个数组的指针
格式: 数据类型 (*指针名)[数组容量]
指针与二维数组
行指针
指向一整行的指针,本质上是一个数组指针,指向一整行
二维数组的名字,就是二维数组的首行地址
指向二维数组的指针 :数组指针
行指针可以定义为数组指针,且数组容量为列数
列指针
行指针解引用(降级)就是列指针