C基础
#include <stdio.h>
int main() {
printf("hello");
return 0;
}
基础数据类型
c的基础数据类型包括:字符型【char】/整型【int/short/long】/浮点型【float/double】
对应输出函数:
%d -> int
%ld -> long int
%c -> char
%f -> float
%lf -> double
%x -> 十六进制输出int或long/int 或者 short/int
%#x -> 0x开头的16进制
%s -> 字符串
#include <stdio.h>
int main() {
int i = 100;
double d = 200;
float f = 200;
long l = 100;
short s = 100;
char c = 'C';
printf("i的值: %d\n",i);
printf("d的值: %ld\n",d);
printf("f的值: %f\n",f);
printf("l的值: %ld\n",l);
printf("s的值: %d\n",s);
printf("c的值: %c\n",c);
return 0;
}
输出结果为:
函数sizeof获取数据类型所占字节数
#include <stdio.h>
int main() {
printf("int 数据类型所占字节数: %ld \n", sizeof(int));
printf("double 数据类型所占字节数: %ld \n", sizeof(double));
printf("char 数据类型所占字节数 %ld \n", sizeof(char));
return 0;
}
其结果
指针变量和获取地址的值
-
指针信息
& 代表取变量的地址
输出函数对应 %p
int main() { int i = 100; printf("i的地址是: %p",&i); return 0; }
输出结果为:
-
指针变量
-
操作符 *,获取地址的值
int main() { int i = 100; double d = 200; printf("i的值是: %d\n",i); //通过 * 操作的必须是指针,其意义是获取地址的值 printf("使用*获取的i值:%d \n", *(&i)); return 0; }
-
指针存放地址
int main() { int i = 100; int* p = &i; printf("p地址上的值是:%d \n",*p); }
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200819120213348.png#pic_center)
-
-
指针操作
-
指针修改值
int main() { int i = 100; int* p = &i; printf("i的值: %d\n",i); *p = 200; printf("i的值: %d\n",i); }
-
方法传递修改值
void change(int* i) { printf("change中的i地址:%p /n",&i); *i = 200; } int main() { int i = 100; printf("i地址是: %p /n",&i); change(&i); printf("i值是:%d /n", i); }
-
-
二级指针与多级指针
-
二级指针存放一级指针地址,一级指针指向实际存放值
int main() { int num = 12; int* p = # int** sp = &p; printf("p val:%p sp val:%p \n",p,sp); printf("p val:%p sp val:%p \n",&p,&sp); printf("p val:%d sp val:%d \n",*p,**sp); return 0; } 故对二级指针做两次取值操作即可获取实际存放值
-
-
数组与数组指针
-
arr 的值 = arr 地址的值 ,arr 地址的值 = arr[0]的地址的值(即首地址)
int main() { int arr[] = {1,2,3,4}; printf("arr = %p",arr); printf("&arr = %p",&arr); printf("&arr[0] = %p",&arr[0]); return 0; }
int main() { int arr[] = {1,2,3,4}; int i = 0; for(; i < 4; i++) { printf("position:%d,值:%d \r",i,*(arr+i)); } return 0; }
-
-
函数指针(回调)
-
函数回调(返回值)(方法名)(参数一类型,参数二类型…)
void opt(void(callmethod)(int,int) int num1, int num2) { printf("---opt---\n"); callmethod(num1,num2); } void add(int num1,int num2) { printf("num1 + num2 = %d\n",(num1 + num2)); } int main() { add(1,2) opt(add,4,5); return 0; }
-
函数指针回调【(返回值)(*方法名)(参数一类型,参数二类型…)】
void callback(int current,int total) { printf("current:%d, total:%d",current,total); } void optMethod(char* filename,void(*callmethod)(int,int)) { callmethod(12,24); } int main() { void(*call)(int,int); call = callback; optMethod("a.zip",call); return 0; }
-