> 文章列表 > C语言基础

C语言基础

C语言基础

为了学习数据结构,整理一篇基础的C语言入门知识(仅供自身学习用)

条件运算符

语法:exp1 ? exp2 : exp3;
exp1是条件表达式,如果结果为真,返回exp2
如果结果为假,返回exp3

if (a > b)max = a;
elsemax = 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 10int 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 = &num;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 = &num;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;

结构体指针
通过结构体指针访问结构体成员有两种方法
(*结构体指针).成员名
结构体指针->成员名