-
return;
在void函数中会用到这种形式,这条语句会终止函数,并把控制返回给主调函数 -
指针
ptr = &bath;
val = *ptr;
上述两条语句等价于val = bath;
-
int days[] = {10, 20, 30, 40}
index = sizeof days;
sizeof以字节为单位计算数组大小 -
指定初始化器:初始化指定的数组元素
int arr[6] = {[5] = 212};
如果指定初始化器后面有更多的值,这些值被用于指定元素后面的元素
当再次初始化同一个指定元素时,最后初始化取代之前的初始化 -
days == &days[0]; //days为数组
数组名是数组首元素的地址 -
在C中,指针+1指的是增加一个存储单元
-
%zd可以打印sizeof的返回值,编译器不支持%zd时可以用%u或者%lu替换
-
间接运算符的优先级比+、-、*、/高,但是与自增、自减运算符优先级相等
-
ar为数组
ar[i] == *(ar + 1);
-
指针与整数相加:用+运算把指针与整数相加,整数都会和指针所指向类型的大小相乘,然后把结果与初始地址相加
-
递增指针:递增指向数组元素的指针可以让该指针移动至数组下一个元素,本身的地址不变,变量不会因为值发生变化而移动位置,递减同理
-
指针减去一个整数:指针必须是第一个运算对象,整数是第二个运算对象,该整数乘以指针指向类型的大小,然后用初始地址减去乘积
-
指针地址用%p打印,%td打印地址差值
-
指针求差:C保证指向统一数组的两个指针相差运算有效
-
指针比较:使用关系运算符可以比较两个指针的大小,前提是两个指针的类型必须相同
-
对形参使用const可以保证数组的数据不被修改
-
把const数据或非const数据的地址初始化为指向const指针或为其赋值是合法的,只能把非const数据的地址赋给指针
不能用非const标识符修改const数据,C不能把const参数传递给非const标识符的函数
const double *pc = rates; //不能指向别处
double * const pc = rates; //不能赋值
double * const *pc = rates; //不能赋值也不能指向别处
-
days是一个二维数组
**days 与 *&days[0][0]等价
days+2表示二维数组的第3个元素(一维数组)地址
*(days+2)表示二维数组第3个元素的首元素的地址
*(days+2)+1表示第3个元素的第二个元素地址
*( *(days+2)+1)表示第3个元素的第二个元素的值 -
int (*pz)[z]; //pz指向一个内含两个int类型值的数组
int *pz[z]; //([]的优先级较高),pz是一个内含2个指针元素的数组,每个元素都指向int的指针
-
声明指向N维数组的指针时,只能省略最左边括号中的值
-
变长数组不能改变大小,而是在创建数组时,可以使用变量
-
复合字面量:
(int [z]){10, 20} //int[z]是复合字面量的类型名
由于复合字面量是匿名的,所以不能先创建再使用,必须在创建的同时使用
int *pt;
pt = (int [z]{10, 20})
-
int islower(int c); 包含在ctype.h文件中 ,用来判断一个字符是否是小写字母
-
mallo()函数: 头文件stdlib.h,用于分配动态内存,如果分配成功:则返回指向被分配内存空间的指针