初始c笔记bing

Posted 鸟随二月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始c笔记bing相关的知识,希望对你有一定的参考价值。

类型字节

char 1
short 2
int 16位电脑 2 32/64位 4
long 4 linux 8
long long 8
float 4
double 8
long double 8

c上机过程

(程序)编辑、(源程序,.c)编译、(目标程序,.obj)连接、(可执行程序,*.exe)运行、结果

转义字符

\\ddd 1-3位8进制 如:”\\101“是 101
\\xdd 2位 16进制 如:"\\x41" 是41
“>>” 左补最高符号位
“<<” 右补0

特殊程序

int d=(10,20);//d=20
extern void fun();//static 修饰只能再当前.c使用

标识符常量预编译


指针

在32位中指针4字节,64位中指针8字节

switch

c中 switch(a) a是整型,char

void *memset(void *str, int c, size_t n)

EOF对应的命令行是ctrl+z

预防头文件重复编译

数组

整型提升

char a=1,b=1,c; 
c=a+b;

a,b先提升整形后(最高位是几补几),运算后再转化成char。即(char 和short使用前先转化成整型),这个过程叫做整型提升

sizeof()

返回的是无符号整型

指针

void类型的指针不可±操作

避免野指针

  1. 指针初始化
  2. 小心指针越界
  3. 指针指向空间释放即使置NULL
  4. 避免返回局部变量的地址
  5. 指针使用之前检查有效性

指针可以与数组之后的元素比较,不可以于之前的元素比较

int a[10]=1,2,3,4;
//a和&a[0]代表首元素地址,&a代表整个数组地址

二级指针

指针与函数

对于一个函数而言,当形参是指针变量时,对应的实参可以是指针变量,也可以是存储单元地址,此时的指针变量也遵守单向传递的原则(实参向形参传递)

指针函数

函数返回值是指针的函数。

函数指针

指向函数的指针变量
例子:

# include <stdio.h>
int Max(int, int);  
int main(void)

    int(*p)(int, int);  //定义一个函数指针
    int a, b, c;
    printf("%d",Max); //或者 &Max 函数地址 
    p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
    printf("please enter a and b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  
    //通过函数指针调用Max函数,可以化简为 p(a,b)
    printf("a = %d\\nb = %d\\nmax = %d\\n", a, b, c);
    return 0;

int Max(int x, int y)  

    int z;
    if (x > y)
    
        z = x;
    
    else
    
        z = y;
    
    return z;

指针数组

存放指针的数组

int *a[3];

数组指针

指向数组的指针

数组与指针

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址。


指针与字符串

char *a="123";
printf("%s",a);

回调函数

#include <stdio.h>
//qosrt函数的使用者得实现一个比较函数
int int_cmp(const void * p1, const void * p2) 
  return (*( int *)p1 - *(int *) p2);

int main()

    int arr[] =  1, 3, 5, 7, 9, 2, 4, 6, 8, 0 ;
    int i = 0;
    
    qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);
    for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)
   
       printf( "%d ", arr[i]);
   
    printf("\\n");
    return 0; 

使用回调函数,模拟实现qsort(采用冒泡的方式)。

 #include<stdio.h>
 int int_cmp(const void * p1, const void * p2) 
 return (*( int *)p1 - *(int *) p2);

void _swap(void *p1, void * p2, int size) 
 int i = 0;
 for (i = 0; i< size; i++)
 
char tmp = *((char *)p1 + i);
 *(( char *)p1 + i) = *((char *) p2 + i);
  *(( char *)p2 + i) = tmp;
  

void bubble(void *base, int count , int size, int(*cmp )(const  void *,const  void *))

 int i = 0;
int j = 0;
for (i = 0; i< count - 1; i++)
  
 for (j = 0; j<count-i-1; j++)
  
if (cmp ((char *) base + j*size , (char *)base + (j + 1)*size) > 0)
 
  _swap(( char *)base + j*size, (char *)base + (j + 1)*size, size);
 
  
  

int main()

int arr[] =  1, 3, 5, 7, 9, 2, 4, 6, 8, 0 ;
 //char *arr[] = "aaaa","dddd","cccc","bbbb";
 int i = 0;
 bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);
 for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)
 
 printf( "%d ", arr[i]);
  
 printf("\\n");
 return 0; 

指针面试题



strlen()函数形参时 * char类型的









%p 打印地址


以上是关于初始c笔记bing的主要内容,如果未能解决你的问题,请参考以下文章

初始c笔记bing

网络初始bing

C语言基础学习笔记七初始结构体(详细讲解+代码举例+图解)

Wpf binging

C语言基础学习笔记六初始指针(重点必看)(详细讲解+代码举例+练习巩固)

Jekyll 偏移代码片段高亮的初始行