C重点知识汇总
printf(“str = %s”, str); 输出字符串
strlen()计算字符的长度
strcpy( str2, str1)把str1中字符拷到str2目的字符串内存要做够大)
strcat()字符串拼接被拼接字符串要足够大
strcmp()判断两字符’是否相等
sizeof是运算符,strlen()是函数,
sizeof计算的是分配空间的长度,strlen()计算的是字符的长度
for (int i = 0; i < 4; i ++) {
for (int j = 0; j < 4 - i; j ++) {
if (strcmp(name[j + 1], name[j]) < 0) {
char s[25] = {0} ;
strcpy(s, name[j + 1]);
strcpy(name[j + 1], name[j]);
strcpy(name[ j], s);
}
}
}
for (int i = 0; i < 5; i ++) {
printf("%s", name);
}
}
//字符串数组排序
++、--在前,先++、--,再运算;
++、--在后,先运算,再++、--;
a += b 相当于 a = a + b

二进制在编程时以 0b 开头
与运算 & :有 0 为 0 ,全 1 为 1 ;
或运算 | :有 1 为 1 , 全 0 为 0 ;
异或运算 ^ :不同为 1 ,相同为 0 ;
取反运算 ~ :逐位取反(单目运算);
计算机存储数据存补码:正数补码是本身;
负数的存储:负数补码,绝对值取反加1
右移 >> 数值除2;左移 << 数值乘2
十进制%d 八进制%o 十六进制 %x\%X
\t 水平制表符 \v 垂直制表符
一个空格可以代表控制台输入多个空格或tab或回车
与或运算y
条件运算符 ?: 三目运算
a > b ? a : b a为真, b为假
变量(字母、数字(不能开头)、下划线、不能占用系统关键字(int)、
见名之意,驼峰命名法(首字母小写,后边首字母大写)、变量名不能重名):
类型修饰符 变量名=初始值
“=”、前后空格,“,”后面空格
short 两个字节, int 四个字节, long 八个字节
int 和float 4个,long 和double 8个, short 2个 char 1个
short 2个字节 16位,-2^15__2^15-1
int 4个字节 32位, -2^31__2^31-1
long 8个字节 64位, -2^63__2^63-1
char 1个字节 8位, -2^7__2^7-1
unsigned int 4, 32位, 0__2^32-1
unsigned short 2, 16位, 0——2^16-1
sizeof 是一个运算符,strlen是一个函数
break 跳出本层循环,后面不再执行
continue 结束本次循环,进行下次循环十进制转X进制:连除倒取余
十六进制:1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
X进制转十进制:按权求和法
563=5*10^2+6*10^1+3*10^0 10为基数
一个十六进制位等价于四个二进制位
一个八进制位等价于三个二进制位
二进制转十六进制:从右往左每四位隔开
scanf(“%[^\n]”,str);输入的空格一类也认为是字符的一部分,回车为结束符.
ctrl + command + ↑/
,.h和.m文件切换
函数返回值不能返回数组
static int publicValue = 0;
全局变量加static只有本文件可以访问,不加的话,只要别的文件引入头文件,那么均可使用;
鞍点算法
#define N 5
int a[N][N] = {0};
int ad = 0, md = 0, n = 0, m = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[j] = arc4random() % 100;
printf("%d\t", a[j]);
}
printf("\n");
}
printf("\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (ad < a[j]) {
ad = a[j];
n = i;
m = j;
}
}
printf("第%d行的最大值为:%d,在第%d列\n", n + 1, ad, m + 1);
md = ad;
for (int k = 0; k < N; k++) {
if (md > a[k]
) {
md = a[k]
;
}
}
printf("第%d列的最小值为:%d.\n", m + 1, md);
printf("\n");
if(ad == md)
printf("鞍点是:%d,在第%d行,在%d列.\n",ad, n + 1, m + 1);
ad = 0;
md = 0;
}
iphone 5s, ipad5, ipod Air 操作系统 64位
其他都是32位操作系统
printf(“%p”, &a);输出内存地址
//int * p 代表定义一个指针变量,*就是告诉编译器,变量p是一个指针变量
//*p 就是取指针变量P指向的内存区域里边的内容
//两者区分,前面是否带数据类型
//指针变量的重新赋值意味着指针的重指向
//很低的内存区域受系统保护,不可操作
//一个指针变量必须要有明确的指向
//a[1] == *(a + 1) == *(p + 1)恒等
// //p++等于p = p + 1,指针重新赋值,指针重指向
// //p + 1只是从p开始到p + 1的位置的偏移量,原来的指针p并没有重指向
//不同类型的指针,在移动的适合,移动的字节数不一样
// //不同类型的指针,在取值的时候,取的字节数不一样
// //移动的字节,和取值的字节,取决于指针的类型
//数组名a虽然是数组的首地址,但是当用sizeof测算所占字节的时候,编译器会检查是否是数组名,如果是数组名,则返回数组所占用得内存空间数
a = m;数组名是常量地址,不能被重新赋值(重指向)
//指针p是变量,所以它可以重新赋值(重指向)
char str[100] = “I love iOS” 这种方式定义字符串,常量区有一份I love iOS,在数组初始化的过程,常量区的内容会拷贝到栈的那个数组中,以后我们可以操作字符,也就是数组名是常量地址,不可以重指向,内容是变量,可以修改
char * string = “I love iOS”; 这种方式定义字符串,是直接把常量区的地址返回赋值给指针string,指针string是变量,可以重指向,但是指针指向的内容是常量,不可修改!
泛型指针,任何类型都可以指向输出时需定义类型*((int * )p)
calloc(n, size);(清0)
//总结::const在*前面,指向 的内容不可以被修改,const在*后面,是指针不可以修改(重指向)
static修饰的变量存储在全局区(静态区),默认初始值为0
只初始化一次,
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
