为了学习数据结构,整理一篇基础的C语言入门知识(仅供自身学习用)
条件运算符
语法:exp1 ? exp2 : exp3;
exp1是条件表达式,如果结果为真,返回exp2
如果结果为假,返回exp3
if (a > b)
max = a;
else
max = b;
与下面语句是等价的
max = a > b ? a : b
goto语句
语法:goto标签;
#include <stdio.h>
int main()
{
int i = 5;
while (i++)
{
if (i > 10)
{
goto A;
}
}
A: printf("Here, i = %d\n", i);
return 0;
}
在C语言中尽量少用goto语句,容易破坏原来的代码逻辑。
int 占据四个字节, char型占据一个字节,double型占八个字节。
使用循环来访问数组
int a[10];
for (i = 0; i < 10; i++)
{
a[i] = i;
}
录入班级十个人的成绩,并求平均数
#include <stdio.h>
#define NUM 10
int main()
{
int s[NUM];
int i, sum = 0;
for (i = 0; i < 10; i++)
{
printf("请输入第%i位同学的成绩::, i + 1);
scanf(“%d", &s[i]);
sum += s[i];
}
printf("本次考试的平均分数是:%.2f\n", (double)sum / NUM);
return 0;
}
指针
定义指针变量
类型名 *指针变量名
char *pa; //定义一个指向字符型的指针变量
int *pb; //定义一个指向整型的指针变量
如果需要获取某个变量的地址,可以使用取地址运算符( & )
char *pa = &a;
int *pb= &f;
如果需要访问指针变量指向的数据,可以使用取值运算符 ( * )
printf(“%c, %d\n”, *pa, *pb);
#include <stdio.h>
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
printf("a = %c\n", *pa);
printf("f = %d\n", *pb);
*pa = "C";
*pb += 1;
printf("now, a = %c\n" ,*pa);
printf("now, f = %d\n" ,*pb);
printf("sizeof pa = %d\n", sizeof(pa));
printf("sizeof pb = %d\n", sizeof(pb)); \\指针地址都是4字节
printf("the addr of a is : %p\n", pa);
printf("the addr of b is : %p\n", pb);
return 0;
}
*(array+i) == array[i]
*(*(array+i)+j) == array[i][j]
*(*(*(array+i)+j)+k) == array[i][j][k]
初始化二维数组是可以偷懒的
int array[2][3] = {{0,1,2}, {3,4,5}}
可以写成
int array[][3] = {{0,1,2}, {3,4,5}}
定义一个数组指针是这样的
int (*p)[3];
#include <stdioo.h>
int main()
{
int array[2][3] = {{0,1,2}, {3,4,5}};
int (*p)[3] = array;
printf("**(p+1): %d\n", **(p+1));
printf("** array+1): %d\n", **(array+1));
printf("array[1][0]: %d\n", array[1][0]);
printf("*(*(p+1)+2): %d\n", *(*(p+1)+2));
printf("*(* array+1)+2): %d\n", *(*(array+1)+2));
printf("array[1][2]: %d\n", array[1][2]);
return 0;
}
void指针
void指针称为通用指针,它可以指向任意类型的数据,任何类型的指针都可以赋值给void指针。
#include <stdio.h>
int main()
{
int num = 1024;
int *pi = #
char *ps = "FishC";
void *pv;
pv = pi;
printf("pi:%p, pv:%p\n", pi, pv);
pv = ps;
printf("ps:%p, pv:%p\n", pi, pv);
return 0;
}
输出的内容是指针指向的地址
NULL指针
#define NULL ((void *)0)
指向指针的指针
#include <stdio.h>
int main()
{
int num = 520;
int *p = #
int **pp = &p;
return 0;
}
num 520
p &num
*p num 520
pp &p
*pp p &num
**pp *p num 520
结构体
定义结构体类型变量
struct 结构体名称 结构体变量名
或者在结构体尾部定义变量
要访问结构体成员,我们需要引入一个新的运算符,点号(.)运算符。比如book.title就是引用book结构体的title成员,它是一个字符数组;而book.price则是引用book结构体的price成员,它是一个浮点型的变量。
#include <stdio.h>
struct Book
{
char title[128];
char auther[40];
float price;
unsigned int date;
char publisher[40];
} book;
int main(void)
{
printf("请输入书名:”);
scanf("%s", book.title);
printf("请输入作者:”);
scanf("%s", book.author);
printf("请输入售价:”);
scanf("%s", &book.price);
printf("请输入出版日期:”);
scanf("%s", &book.date);
printf("请输入出版社:”);
scanf("%s", book.publisher);
printf("\n=====数据录入完毕=====");
printf("书名:%s\n", book.title);
printf("作者:%s\n", book.author);
printf("售价:%s\n", book.price);
printf("出版日期:%s\n", book.date);
printf("出版社:%s\n", book.publisher);
return 0;
结构体指针
通过结构体指针访问结构体成员有两种方法
(*结构体指针).成员名
结构体指针->成员名