C语言基础

main参数

  • mian函数可以解释参数
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RJFcZoad-1646382547706)(https://note.youdao.com/yws/res/5259/WEBRESOURCEc5a91293d33e4a967afe47e02af719f4)]传入了三个参数

  • 数组可以保存字符串

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVXK9bsc-1646382547709)(https://note.youdao.com/yws/res/5263/WEBRESOURCE7b6efc3da2498550124bf89512badf2d)]

#include <stdio.h>

int main(int argc,char *argv[])
{

    int     i;

    printf("hello world\n");
    for(i=0;i<argc;i++)
    {

        printf("argv[%d]:%s\n",i,argv[i]);
    }
    return 0;


}
wangaifei@ubuntu18:~/lingyun/code$ gcc main.c -o main//编译生成可执行文件
wangaifei@ubuntu18:~/lingyun/code$ ./main xixi hh ss dd
hello world
argv[0]:./main
argv[1]:xixi
argv[2]:hh
argv[3]:ss
argv[4]:dd
wangaifei@ubuntu18:~/lingyun/code$ 

C语言有可移植性

  • 编译器不同

程序开发流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2riMK0y-1646382547710)(https://note.youdao.com/yws/res/5272/WEBRESOURCE28ddb747620a4cea1bfcd69c3bcbdc5b)]

指针

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9NBf4TS-1646382547711)(https://note.youdao.com/yws/res/5276/WEBRESOURCE0c4b7da9c0cc81cb905042d891016cf8)]

用*p1保存p的地址(&p),p是int * 类型,int * *p1=&p

字符

  • 全缓冲:缓冲区满了才打印
  • 行缓冲:\n打印

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1iY7hXAY-1646382547712)(https://note.youdao.com/yws/res/5297/WEBRESOURCE36b03ef1f88818047d5fa0ad113d63aa)]

字符串

  • gets:输入一个字符串保存到buf中
  • char gets(char *s),gets函数不安全,容易溢出,谨慎调用
char *str='hello';

char buf[1024];

gets(buf);
  • fgets
fgets(buf,sizeof(buf),stdin);//最大不能超过sizeof(buf)

字符串函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSr54A3X-1646382547714)(https://note.youdao.com/yws/res/5316/WEBRESOURCE20676fbe14ab33b9de64ae0754060803)]

stelen("hello\0hahah")为5
  • snprintf(buf,sizeof(buf),str),防止溢出
int snprintf(char *str,size_t size,const char*format,...)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbviP8mA-1646382547715)(https://note.youdao.com/yws/res/5326/WEBRESOURCEf1d8d2dc1f948a19449cd48833ffd2c1)]
找第二个’o’
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9xBn0IB-1646382547716)(https://note.youdao.com/yws/res/5329/WEBRESOURCEc469faac77d6e9f0ff82231a2b2e8779)]

  • memset
void *memset(void *s,int c,size_t);
int arr[100];

memset(arr,0,sizeof(arr));

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cE6UFdXJ-1646382547716)(https://note.youdao.com/yws/res/5339/WEBRESOURCEb6f1995bad28c48e70fdf67a10c160b5)]

  • memset
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVilXauE-1646382547717)(https://note.youdao.com/yws/res/5341/WEBRESOURCEbf4debfceebe0ac77e9e89174a94db20)]

文件

  • fseek 文件偏移量
int fseek(FILE *stream,long offset,int whence);
fseek(fp,0,SEEK_SET);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDUof9bw-1646382547718)(https://note.youdao.com/yws/res/5353/WEBRESOURCE44243b7aacd83659e291bbcf56106e98)]

指针和数组

#include <stdio.h>

int main(int argc,char **argv)
{

    int         a=0x12345678;
    int         *pint=&a;
    char        *pch=(char *)&a;
    short       *psh=(short *)&a;

    printf("*pint=0x%x,*pch=0x%02x,*psh=0x%hx\n",*pint,*pch,*psh);

    return 0;

}
wangaifei@ubuntu18:~/lingyun/code$ gcc pointer.c -o pointer
wangaifei@ubuntu18:~/lingyun/code$ ./pointer 
*pint=0x12345678,*pch=0x78,*psh=0x5678
wangaifei@ubuntu18:~/lingyun/code$ gcc -g pointer.c 
wangaifei@ubuntu18:~/lingyun/code$ gdb a.out 
(gdb) b 11   //在11行设置断点
Breakpoint 1 at 0x6e7: file pointer.c, line 11.
(gdb) r    //运行
Starting program: /home/wangaifei/lingyun/code/a.out 

Breakpoint 1, main (argc=1, argv=0x7fffffffe4e8) at pointer.c:11
11          printf("*pint=0x%x,*pch=0x%02x,*psh=0x%hx\n",*pint,*pch,*psh);
(gdb) print &a
$1 = (int *) 0x7fffffffe3dc
(gdb) print pint
$2 = (int *) 0x7fffffffe3dc
(gdb) print pch
$3 = 0x7fffffffe3dc "xV4\022\334\343\377\377\377\177"
(gdb) print psh
$4 = (short *) 0x7fffffffe3dc
(gdb) print &pint
$5 = (int **) 0x7fffffffe3e0
(gdb) print &pch
$6 = (char **) 0x7fffffffe3e8
(gdb) print psh
$7 = (short *) 0x7fffffffe3dc
  • 指针是用来存放地址的
  • 指针的类型表示取值时,一次性取多少个字节
  • 指针++(自加),加指针类型个单元
pch++;psh++; 
 printf("*pch=0x%02x,*psh=0x%hx\n",*pch,*psh);
wangaifei@ubuntu18:~/lingyun/code$ ./pointer 
*pint=0x12345678,*pch=0x78,*psh=0x5678
*pch=0x56,*psh=0x1234
  • 在一个函数里改变另一个函数变量里面的值,传地址,用指针
  • 例:交换两个数据的值
#include <stdio.h>
void swap(int *x,int *y);

int main(int argc,char ** argv)
{

    int         a=10;
    int         b=20;

    printf("a:%d,b:%d\n",a,b);

    swap(&a,&b); 
       
    printf("a:%d,b:%d\n",a,b);

    return 0;
}

void swap(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;


}
wangaifei@ubuntu18:~/lingyun/code$ gcc swap.c -o swap
wangaifei@ubuntu18:~/lingyun/code$ ./swap 
a:10,b:20
a:20,b:10

const 关键字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSWeck4G-1646382547719)(https://note.youdao.com/yws/res/5380/WEBRESOURCEde26c4b7c58bd1f4df8f68b096ecf59c)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wveFsW54-1646382547720)(https://note.youdao.com/yws/res/5387/WEBRESOURCE19ce08dbb749a88e855ecf553f3067b6)]

*p1 = 30不合法;    p1=&b合法;  a=20合法;
*p2=30合法;  p2=30不合法;
*p3=30不合法; p3=&b不合法;

全局变量

  • 已初始化的全局变量,可以被所有其他c文件或本c文件的函数调用
  • 如果其他c文件要使用,则先声明,例:extern int g_data_var;
  • 未初始化的全局变量,结果为0,可以被所有其他c文件或本c文件的函数调用
  • 未初始化的静态全局变量,结果为0,static关键字声明的函数或变量,只能被本c文件调用

c程序内存布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cle0YiMe-1646382547720)(https://note.youdao.com/yws/res/5413/WEBRESOURCEc6a44ddc4f8004530c1c32677629ed21)]

联合

判断大端小端字节序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Odkst3vN-1646382547721)(https://note.youdao.com/yws/res/5416/WEBRESOURCE3dcef7a522292ce9a55f1bb25ce4022c)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A3HLlTyr-1646382547722)(https://note.youdao.com/yws/res/5418/WEBRESOURCEe5116937f59ae926b42c055086f61625)]

结构体

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDn7A0Fs-1646382547722)(https://note.youdao.com/yws/res/5423/WEBRESOURCEa0a4c9486e394f312e91e91be88a16c3)]

Typedef

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7MMIe7Pc-1646382547723)(https://note.youdao.com/yws/res/5425/WEBRESOURCE9465d10d5a9dbbe3ddcac858b96ff03c)]

##结构体对齐
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fxgJya5-1646382547724)(https://note.youdao.com/yws/res/5428/WEBRESOURCE9714d780b8db82c0988d14ca682ada39)]

结构体数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iUBOvN3g-1646382547725)(https://note.youdao.com/yws/res/5431/WEBRESOURCEba09179e0be5e49e3aa911dec8f8a33a)]

结构体指针

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ot8C7vQy-1646382547726)(https://note.youdao.com/yws/res/5433/WEBRESOURCE494e1dd16a05856e8df26e6244c18602)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjkDDKaM-1646382547726)(https://note.youdao.com/yws/res/5435/WEBRESOURCE4976c07807e61ad2c6f8f07537cb05b5)]

结构体传参

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKo4SV4Y-1646382547727)(https://note.youdao.com/yws/res/5437/WEBRESOURCE05916d20ae38b565d8bf92ed5428f61c)]

函数指针与回调函数

  • 指针是用来存放地址的,函数名就是函数的入口地址
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZJpCPYL-1646382547728)(https://note.youdao.com/yws/res/5444/WEBRESOURCEaf2d18b0ff7807d3fb24920e9b9a157c)]

条件编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QyXTZRC1-1646382547729)(https://note.youdao.com/yws/res/5448/WEBRESOURCEd124b83e261bedbca9a87d9d65244d3e)]

头文件路劲

  • /usr/include

#include <stdio.h>与#include “stdio.h”

  • < >:头文件会在系统路劲里找
  • “ ”:先在当前路劲下找,找不到再在系统路劲下找。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值