c语言基础类型

时间:2021-05-01 15:45:24
字符串
strcpy(p, p1) 复制字符串 
strncpy(p, p1, n) 复制指定长度字符串 
strcat(p, p1) 附加字符串 
strncat(p, p1, n) 附加指定长度字符串 
strlen(p) 取字符串长度 
strcmp(p, p1) 比较字符串 
strcasecmp忽略大小写比较字符串
strncmp(p, p1, n) 比较指定长度字符串 
strchr(p, c) 在字符串中查找指定字符 
strrchr(p, c) 在字符串中反向查找 
strstr(p, p1) 查找字符串 
strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 
strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 
strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移  
* 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 

c结构体
typedef struct Man
{
int age;
int score;
}man;

int main()
{
man man1 = {20,80};
man man2 = {30,70};
man man3 = {40,99};
printf("%d\n",man1.age);
printf("%d\n",man3.score);
}
结构体访问元素使用 结构体名称.元素属性 例如上面的 man1.age
结构体数组
man man4[3] = {
      {20,80},
     {30,100},
     {50,90}
}
访问属性方法 man4[2].age = 30


sizeof
网上有很多文章已经详细讲述过sizeof的用法,但是我觉得其实sizeof并没有那么复杂。在这儿简单地再总结一下。
1,是什么?
sizeof其实就是一个运算符,和那些+,-一样的东西,在程序编译的时候进行解析转换。虽然我们经常见到sizeof后面跟着个小括号,长得和函数差不多,但它和函数完全是两码事。
2,有什么用?
sizeof其实就是用于告诉我们编译器在为某一特定数据或者某种数据类型的数据在存储空间中开辟空间时,开辟的空间大小,以字节为单位。
3,怎么用?
sizeof(类型),或者sizeof(变量)都可以,得到的就是类型或者变量的存储空间。当对变量用的时候,也可以没有括号,直接 sizeof 变量,但一般不用(我一般都是只记一种通用的用法……)。
4,用的时候要注意什么?
(1)sizeof返回的占用空间大小是为这个变量开辟的大小,而不只是它用到的空间。和现今住房的建筑面积和实用面积的概念差不多。所以对结构体用的时候,大多情况下就得考虑字节对齐的问题了。
(2)对位域成员等连编译器都无法确定存储空间的东西不能用。这个应该比较好理解,因为sizeof返回的都是以字节为单位的数据,你让它去求那些以位为单位的大小,这不是存心难为编译器嘛。所以编译器采用的方案是统一不受理,即使你说你刚好是8位,占一个字节,编译器也不理你。
(3)sizeof返回的数据类型是unsigned int。因为C中不同类型数据混合运算时的自动转换,有时候不注意的话可能会出问题,具体可以参照下面的程序例子。
(4)要注意数组名和指针变量的区别。通常情况下,我们总觉得数组名和指针变量差不多,但是在用sizeof的时候差别很大,对数组名用sizeof返回的是整个数组的大小,而对指针变量进行操作的时候返回的则是指针变量本身所占得空间,在32位机的条件下一般都是4。而且当数组名作为函数参数时,在函数内部,形参也就是个指针,所以不再返回数组的大小。
例如:

typedef struct Man
{
int age;
int score;
}man;
man man4[] = {
      {20,80},
     {30,100},
     {50,90}
}
这样一个结构体,需要统计结构体数组的个数,则:
int count = sizeof(man)/sizeof(man4[0]);
具体用法还有好多。。。


数组
//这是字符数组赋初值的方法
char cArr[6] = {'Q','U','A','N','X','U','E'};
//这是字符串赋初值的方法
char sArr[6] = "quanxue";
int intArr[3] = {1,2,4}
int intArr[3][2] = {{1,2},{3,4},{5,6}}
冒泡排序
int intArr[3] = {8,7,9}
for(int i=0; i<sizeof(intArr)/sizeof(intArr[0]); i++) {
     for(int j=0; j < sizeof(intArr)/sizeof(intArr[0])-i; j++) {
         if(intArr[i] > intArr[j]) {
               int tem = intArr[i];
               intArr[i] = intArr[j];
               intArr[j] = tem;
          }
     }
}