###################################################################
define和typedef的区别:
#define INT_PTR int* //简单替换,不是c语句,不要分号
typedef int* int_ptr; //申明一种新类型,需要分号
const int_ptr p;//= int* const p , p的指向不能变,p指向的内容可以变
const INT_PTR p;//=const int *p, p指向的内容不能变,p的指向可以变
INT_PTR a,b; //int (*a),b = int *a, int b
int_ptr a,b; //(int*) a,b = int *a, int *b
####################################################################
strlen和sizeof的区别:
sizeof #关键字,参数可以是指针、数组、类型、函数等。
size_t strlen(constchar *s); #函数,参数只能是char *类型,以\0结尾。
char str[20]=”0123456789”;
strlen(str)=10; //结果要在运行时才知道,计算字符串的长度。
sizeof(str)=20; //结果在编译时就知道,计算类型占用的长度。
sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
字符串常量——\n算一个,\0算一个长度,如果结尾没有\n或\0那么会自动加一个长度,eg:
char buf[] = “abcd” sizeof(buf) = 5
char buf[] =“abcd\n” sizeof(buf) = 6
char buf[] =“abcd\0” sizeof(buf) = 6
strlen返回的值表示的含义:
从第一个字符到\0结束,但不包括\0的长度。但是包括\n。
char buf[] = “abcd” strlen(buf) = 4
char buf[] =“abcd\n” strlen(buf) = 5
char buf[] =“abcd\0” strlen(buf) = 4
建议使用的格式:
sizeof (X); //关键字后面加空格
strlen(X); //函数名后面不能加空格
###################################################################
return和exit的区别:
return:是关键字
void exit(int status):是库函数
调用exit函数,结束正在运行的整个程序。
调用return,如果在子函数中当前函数返回到调用函数,如果在main函数中整个程序返回。
建议使用的格式:
reutrn (n); //关键字后面加空格
exit(n); //函数名后面不能加空格
###################################################################
break和continue的区别:
break:结束整个循环
continue:结束单次循环进入下一次循环
###################################################################
结构体的定义方式:
1.
struct stype
{
type var;
};
struct stype svar;
2.
struct stype
{
type var;
} svar;
3.
struct
{
type var;
} svar;
4.
typedef struct
{
type var;
} newtype;
newtype svar;
对于一个结构,如果一个函数返回值是一个结构指针struct XXX *structname,那么需要定义struct XXX *structname 来接收这个返回值。
如果一个函数参数是一个结构指针struct XXX *,那么需要定义一个结构struct XXX,然后用&structname来表示这个参数。
###################################################################