《菜鸟教程》C语言学习
具体可参考https://www.runoob.com/cprogramming/c-tutorial.html
//
// Created by pengxiangzhou on 2021/1/23.
//
#ifndef C_DS_C_BASIC_H
#define C_DS_C_BASIC_H
#endif //C_DS_C_BASIC_H
#include <stdio.h> // 预处理器指令以#开头,标准输入输出库函数
/*
* 双引号可以输入中文
* 注释用//
* ****常量,字符常量/字符串常量
* 定义符号常量,预处理的时候直接将所有的price替换为20,但是值不能被改变
* 八进制用0开头,十六进制用0X/0x开头,第一位是符号位
* 字符变量和字符串常量是不同的量,字符串常量存储时末尾含有\0
* ASCII码
char a,b;
a = 'a'; //转化成ascii码
b = 'b';
a = a - 32;
b = b - 32;
printf("%c, %c\n%d,%d\n",a,b,a,b); // %c:字符型;%d:整型
* ****自动转换和强制转换
* 所有的浮点运算都是以双精度进行的,即使是仅含float单精度运算的表达式都要转换成double类型的
* char(字节(八位))和short型都要转换成int(4 个字节),char,short-int-unsigned-long-double
* 字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ascii码值放在整型量的第八位,高八位为0
*整数型赋予字符型,只把第八位赋予字符量
* ****左右结合性
* 结合性是根据代码的执行顺序,加(减)法运算符具有右(左)结合性,乘法和除法具有左结合性
* ****自增、自减
* ++i/--i, i自增/减1后再参与其他的运算;i++/i--,i参与运算后,i的值域再自增/减1
* ****判断
* (num%2==0)?printf("偶数"):printf("奇数");
* **** c语句包括
* 表达式语句(表达式;),函数调用语句(函数名、实际参数;),控制语句(条件判断/循环/转向语句,goto/break/continue/return)
* 复合语句(多个语句有{}组成),空语句(只有分号;什么都不执行),eg,只要从键盘输入的字符不是会车就重新输入:while(getchar() !='\n'){;}
* **** printf
int i = 8;
//printf把函数内的运算执行一遍,再一次赋值
//有bug:printf("%d\n,%d\n,%d\n,%d\n,%d\n,%d\n", i , ++i , --i , ++i , --i , ++i);
* ****输入输出char
char a = 'B', b='o';
putchar(a);putchar(b);putchar('\n'); putchar(a);putchar(b);
char c;
c = getchar();
printf('Please input an word');
putchar(c);
* **** 指针
**** 简单例子
int var = 20; 实际变量的声明
int *ip;
ip = &var;
var 变量的地址: &var
在指针变量中存储的地址 :ip
使用指针访问值:*ip
**** NULL 指针
int *ptr = NULL;
ptr 的地址是 0x0: 内存地址 0是操作系统保留的,它表明该指针不指向一个可访问的内存位置。
* **** 指针的运算
指针的每一次递增,它其实会指向下一个元素的存储单元。
指针的每一次递减,它都会指向前一个元素的存储单元。
指针在递增和递减时跳跃的字节数取决于指针所指向变量数据类型长度,比如 int 就是 4 个字节。
在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,数组可以看成一个指针常量。
让数组存储指向 int 或 char 或其他数据类型的指针:指针数组
需要指向整数的指针数组,把 ptr 声明为一个数组,由 MAX 个整数指针组成: int *ptr[MAX];
*/
/*指针数组*/
#include <stdio.h>
const int MAX = 3;
int main1 ()
{
int var[] = {
10, 100, 200};
int i, *ptr;
/* 指针中的数组地址 */
ptr = &var[0]; // 可写 ptr = var;,因为数组名代表数组的首地址,两个表达式等价
for ( i = 0; i < MAX; i++)
{
printf("存储地址:var[%d] = %p\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 指向下一个位置 */
ptr++;
}
return 0;
}
const int MAX1 = 4;
int main2 ()
{
const char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
int i = 0;
for ( i = 0; i < MAX1; i++)
{
printf("Value of names[%d] = %s\n", i, names[i] );
}
return 0;
}
//指向指针的指针是一种多级间接寻址的形式,一个指针包含一个变量的地址。
//当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。
#include <stdio.h>
int main3 ()
{
int V