- *和++有相等的优先级,结合自右向左,指针自增1。即先把指针指向的数据加到a上,指针再增1。
a += *a++; a += *(a++);//清晰
- ar[i]和*(ar+i)的意义是等价的,但是只有当ar是一个指针变量时,才可以使用ar++这样的表达式。
- 数组形式中,ar是地址常量,与&ar[0]一样,可以使用ar+1标识数组里的下一个元素。
- 增量运算符只能用在变量名前,不能用在常量前。
- *ar 中的ar是指针变量,即在指针形式中,ar是指针变量。
-
C 库函数
void *memset(void *str, int c, size_t n)
复制字符 c(一个无符号字符) 到参数 str 所指向的字符串的前 n 个字符。void *memset(void *str, int c, size_t n)
- str – 指向要填充的内存块。
- c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
- n – 要被设置为该值的字符数,单位是字节;
- 该函数返回一个指向目标存储区 str 的指针。
-
C 库函数
void *memcpy(void *str1, const void *str2, size_t n)
从存储区 str2 复制 n 个字节到存储区 str1。void *memcpy(void *str1, const void *str2, size_t n)
- str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
- n – 要被复制的字节数。
- 该函数返回一个指向目标存储区 st1r 的指针。
- <和<=(>和>=)
建议使用版本A- 版本A:
int a[10], i; for (i = 0; i < 10; i++) //建议 10 - 0 = 10,一共十个数据 { a[i] = 0; }
- 版本B:
for (i = 0; i <= 9; i++) //不建议 { a[i] = 0; }
- 版本A:
-
A 文件中定义了一个
static int i=0
;
然后B文件用include包含了A文件,那么对于B文件来说,A文件就不是别的文件,它就是B文件的一部分静态全局变量只能在本源文件中使用,意思是你不能用extern来声明另外一个文件里的静态全局变量。比如 A文件里的static int i =0;
那么B文件里extren int i就是行不通的,而如果A文件的i不是static的,那么extern int i就可以。
-
基本输入输出头文件
#include<stdio.h>
基本输入输出头文件,没有也可以编译运行程序。但无法使用下面的基本输入输出函数
int getchar()//从标准输入设备写入一个字符 int putchar()//向标准输出设备读出一个字符 int scanf(char *format[,argument…])//从标准输入设备读入格式化后的数据 int printf(char *format[,argument…])//向标准输出设备输出格式化字符串 char *gets(char *string)//从标准输入设备读入一个字符串 int puts(char *string)//向标准输出设备输出一个字符串 int sprintf(char *string,char *format[,…])//把格式化的数据写入某个字符串缓冲区
-
printf里的栈
printf里的栈,对于float类型,都强制转换成8字节的double进栈。按照我的理解,%f在设计中是读取8个字节,这样既可以用来读取float型,也可以用来读double型。
- goto
用于跳出嵌套循环
- return;
只能用于void类型的函数中