zoukankan      html  css  js  c++  java
  • 1-C

    C历史:

    1972-1973 年间,美国贝尔实验室为了描述和实现 UNIX 操作系统(一个具有强大影响力的操作系统,我们实验楼的实验环境 Linux 系统就是一种类 UNIX 系统),于是改良了 B 语言,这就是今天的大名鼎鼎的 C 语言。

    C 语言相当灵活,用于执行几乎所有计算机可以完成的任务,既可以用于编写应用程序,还可用于编写操作系统,伟大的 Windows 和 Linux 操作系统的内核就是使用 C 语言开发的。C 语言包含了基本的编程元素,后来的很多语言(C++、Java 等)都参考了 C 语言,说 C 语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。

    编译过程:

    编译性语言比如 C 或 C++ 写的程序需要将源代码通过预处理-编译-汇编-链接后,生成计算机可执行的机器码语言(二进制代码,即0和1)。

    预处理:展开#include头文件,宏替换、去掉注释、条件编译#if... ...

    编译:检查语法,生成汇编语言(.s文件)

    汇编:将汇编代码转换为机器码(.o文件)

    链接:将各个模块的机器码文件、依赖库连起来生成计算机可执行的文件

     

       

    数组:

    int a[100]; 

    a是数组名,也是个指针,指向首个元素a[0], 可以说是代表整个数组;sizeof(a)=400
    &a是获取指针a的地址,不代表整个数组。sizeof(&a)=4

    字符串常量:

    c语言中没有字符串的类型,所以对字符串操作,有两种形式:可以用字符指针或者字符串数组
    在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。
    因此,你可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。
    但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。
    例如:char a[5];a[0] = "a";就是错误的,报错结果:invalid conversion from 'const char*' to 'char'。
    例如:char a[10]="love",的意思就是用字符串“love”来初始化字符数组a的内存空间,而数组的首地址也就是“love”字符串的地址。
     1 char *p = "abcdef";
     2 
     3 int main()
     4 {
     5     printf("0x%p
    ",p);//指针变量存放的第一个字符的地址值
     6     printf("0x%X,0x%X
    ","abcdef", &"abcdef");//字符串常量出现在表达式中, 本身代表它的第一个字符的存放地址
     7     printf("%s
    ",p);//以字符串打印p指针变量,则打印这个字符串存放地址处的字符串
     8     printf("%c%c%c%c%c%c
    ",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5));//指针所指向的 内存的数据
     9     printf("%x
    ",&p);//指针变量本身的地址
    10 }

     
    格式控制符:
    %d:按十进制整形类型输出数据
    %x:按无符号十六进制整数(字母小写)
    %X:按无符号十六进制整数(字母大写)
    %p:按十六进制整数方式输出指针的值
     
     
    ① 格式控制符“%p”中的p是pointer(指针)的缩写。printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。

    ② 32位编译器的指针变量为4个字节(32位),64位编译器的指针变量为8个字节(64位)。在32位编译器下,使用%p打印指针变量,则会显示32位的地址(16进制的);在64位编译器下,使用%p打印指针变量,则会显示64位的地址(16进制的),左边空缺的会补0。

    ③ %x、%X和%p的相同点都是16进制,不同点是%p按编译器位数长短(32位/64位)输出地址,不够的补零

     
     
  • 相关阅读:
    java.util.concurrent学习
    mysql慢查优化总结
    mysql怎么限制某些查询语句的执行?
    数据库操作提交事务如果不关闭,会有什么样的后果?
    apache的500错误是写到哪个文件里面
    apache也可以做负载均衡,跟nignx的区别是什么?
    ajax提交请求为啥url要用这个函数encodeURI
    MySQL性能调优与架构设计读书笔记
    java枚举的作用
    linux的命令
  • 原文地址:https://www.cnblogs.com/darren-pty/p/darren_c.html
Copyright © 2011-2022 走看看