注:编码工具是CLion+Cygwin64
目录
基本数据类型
#include <stdio.h>
// 基本数据类型
int main() {
short s = 255;
char c = 'A';
int i = 1;
long l = 13;
float f = 3.0f;
double d = 3.0;
printf("s = %d\n", s);
printf("c = %c\n", c);
printf("i = %d\n", i);
printf("l = %ld\n", l);
printf("f = %f\n", f);
printf("d = %lf\n", d);
return 0;
}
输出:
s = 255
c = A
i = 1
l = 13
f = 3.000000
d = 3.000000
字符串:
#include <stdio.h>
// 字符串
int main() {
char * str = "C string";
printf("%s\n", str);
return 0;
}
输出:
C string
sizeof:计算数据类型占用字节数
#include <stdio.h>
// sizeof
int main() {
printf("char sizeof is %d\n", sizeof(char));
printf("short sizeof is %d\n", sizeof(short));
printf("int sizeof is %d\n", sizeof(int));
printf("long sizeof is %d\n", sizeof(long));
printf("float sizeof is %d\n", sizeof(float));
printf("double sizeof is %d\n", sizeof(double));
printf("char* sizeof is %d\n", sizeof(char));
return 0;
}
输出:
char sizeof is 1
short sizeof is 2
int sizeof is 4
long sizeof is 8
float sizeof is 4
double sizeof is 8
char* sizeof is 1
指针:
C/C++(对象) 一切皆指针
Java 一切皆对象
Linux 一切皆文件
通俗理解:指针即地址,地址即指针。
案例一:打印变量地址
#include <stdio.h>
// 案例一:打印变量地址
int main() {
int num = 108;
// &:取地址符,用于获取变量对应的地址
printf("num addr is %p\n", &num);
return 0;
}
输出:
num addr is 0xffffcc3c
案例二:*运算符,作用是取出内存地址的值
#include <stdio.h>
// 案例二:*运算符
int main() {
int num = 108;
// &:取地址符,用于获取变量对应的地址
// *:取出内存地址中的值
printf("num addr is %p, value is %d\n", &num, *(&num));
return 0;
}
输出:
num addr is 0xffffcc3c, value is 108
案例三:定义指针变量,指针存放的是内存地址
#include <stdio.h>
// 案例三:定义指针变量
int main() {
int num = 108;
int *p = #
printf("p value is %p, value in p value is %d\n", p, *p);
return 0;
}
输出:
p value is 0xffffcc34, value in p value is 108
案例四:通过指针修改值
#include <stdio.h>
// 案例四:通过指针修改值
int main() {
int num = 108;
int *p = #
printf("修改前的值为:%d\n", *p);
*p *= 100;
printf("修改后的值为:%d\n", *p);
return 0;
}
输出:
修改前的值为:108
修改后的值为:10800
案例五:通过函数交换两个变量的值(错误示例)
注意:
1、 C语言不允许函数重载。
2、 函数声明或实现应该放在函数调用的上方。
#include <stdio.h>
// 案例五:通过函数交换两个变量的值(错误示例)
void swap();
int main() {
int a = 1, b = 2;
printf("\"交换\"前,a = %d, b = %d\n", a, b);
swap(a, b);
printf("\"交换\"后,a = %d, b = %d\n", a, b);
return 0;
}
void swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
}
输出:
"交换"前,a = 1, b = 2
"交换"后,a = 1, b = 2
失败原因:swap中a和b的值是main函数中a和b的副本。
案例六:使用指针通过函数交换两个变量的值
#include <stdio.h>
// 案例六:使用指针通过函数交换两个变量的值
void swap(int * a, int * b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
int a = 1, b = 2;
printf("交换前,a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("交换后,a = %d, b = %d\n", a, b);
return 0;
}
输出:
交换前,a = 1, b = 2
交换后,a = 2, b = 1