初始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类型的指针不可±操作
避免野指针
- 指针初始化
- 小心指针越界
- 指针指向空间释放即使置NULL
- 避免返回局部变量的地址
- 指针使用之前检查有效性
指针可以与数组之后的元素比较,不可以于之前的元素比较
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];
数组指针
指向数组的指针
数组与指针
- sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
- &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
- 除此之外所有的数组名都表示首元素的地址。
指针与字符串
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的主要内容,如果未能解决你的问题,请参考以下文章