Lazy loaded image
技术分享
6️⃣李程C语言学习笔记
00 min
2021-7-2
2025-1-18
summary
type
status
date
slug
tags
category
文件和媒体
文本
icon
password

数组运算

数组运算:
notion image
集成初始化:
//直接用大括号给出的数组的所有元素做初始值
//不用给出数组大小,编译器替你数
数组初始化:
notion image
集成初始化的定位:
[0]=2就是a[0]=2 [2]=3,6就是a[2]=3 , a[3]=6
数组的大小计算:
notion image
//sizeof(数组)/sizeof(数组的第一个单元)
数组的赋值:
数组和数组之间不能直接赋值!!!
唯一赋值的方法是采用遍历的方法
notion image
遍历的常见错误:
1.循环的条件是≤数组长度
2.离开循环后继续使用i的值做数组元素的下标
例:遍历循环中i<number或i<length中的”number”和“length”就是无用下标,在离开循环后不能作为数组的下标
从大到小选择排序:
notion image

指针与字符串

取地址运算:&运算符取的变量的地址:
注:取地址是16进制;
sizeof:
是一个运算符,可以给出某个类型或某个变量在内存中所占据的字节数;
int:
int在内存中占据4个字节,1个字节是8个比特,4个字节就意味着是一个32位的变量,这个变量在内存中占32个比特;
为什么变量会有地址:
因为c语言的变量是放在内存里的,有字节它在内存中就要占据一定的地方,它放在某一个地方它就有地址;
&:
scanf(“%d”,&i);中的&
1.作用:获取变量的地址;
2.地址大小是否与int相同取决于编译器(取决于是32位架构还是64位架构);
3.用“printf”输出地址需要用“%p”(地址和整数并不完全相同取决于架构所以要用“%p”);
&不能取的地址:
1.不能对没有地址的东西取地址;
  1. &右边必须是明确的变量;
位置关系:
notion image
如图:
此程序编译后得到i和p的地址,由此可以看到两个地址的末位,i末位为c,p末位为8,c在十六进制中为12,12减去8是4,刚好为sizeof(int);由此可知在32位构架中i和p在内存中是紧挨着存放的;
所以i在更高的地方,但他们都分配在一种叫堆栈的地方;
在堆栈中分配变量是自顶向下分配的;
 
数组的地址:
notion image
如图:
程序编译得到&a a &a[0] &a[1]的地址;
由地址末位可见:
在32位架构,内存中&a=a=&a[0]它们在一个地址上,但他们末位和&a[1]末位相差4刚好是sizeof(int);
所以:数组中相邻单元元素的地址之间差距永远都是4;
指针:指针变量就是记录地址的变量;
notion image
细节:
int *p,q和int* p,q:
星号不管是离p近还是离int近他们是一样的,p表示指针而q表示一个普通的int类型的变量;
int *p=&i:
把i的地址交给了指针p而不是把i的值交给了p;
用指针上的地址访问那个变量的值:
要使用单目运算符“*”如“*p”把它看作一个整体;
“*”可做左值也可做右值:
int k = *p;
*p = k+1;
指针与数组:
notion image
如图程序:
数组变量实际上是特殊的指针;
数组变量本身表达地址;
如图可知数组变量a将地址赋给指针p无需用&,但要获取数组每个和单元的地址需要取地址符号&;
通过*p访问数组变量a可知数组变量指针p指向数组变量的第一个单元(a[0]);
上一篇
海风C学习笔记
下一篇
空白文章