C语言编程杂记

1.整型变量

           在C语言中,使用整型变量可以使用八进制,十进制,十六进制数。其中十进制数没有任何前缀,八进制数需要前缀0, 如010, 0762,,等,十六进制数需要0x前缀,如0xFF, 0x98等。

2.指针

指针常量,在C语言中,指针常量只有一个NULL(空地址),因为程序事先是无法知道某个特定变量在内存中会存储到哪个位置,故指针常量表示为数值字面值没有用。

字符串常量,在C语言中,字符串常量在内存中存储时系统自动在字符串的末尾加一个“\0" 串结束标志,即ASCII码值为0的字符NULL。在程序中,长度为n个字符的字符串常量,在内存中需要占用n+1个字节。比较字符'A'  和字符串 "A"的区别,前者只占一个字节的存储空间,后者占两个字节。

可以将字符串常量赋值给一个”字符类型的指针“,用关于指向这些字符所存储的位置。

3.int* a, b, c .注意此种表达方式中,只有a为整数指针类型, b, c为整数类型。

4.全局变量

对于局部变量的定义和声明,可以不加区分,而对于全局变量则不然。全局变量的定义必须在所有的函数之外,且只能定义一次,一般形式为:

[extern]  类型说明符  变量名, 变量名

全局变量声明出现在要使用该外部变量的各个函数内,在整个程序中,可能出现多次,全局变量声明的一般形式为:

extern  类型说明符   变量名 , 变量名

全局变量在定义时就已经分配了内存单元,并且可以初始赋值。全局变量的声明不能再赋初始值,只是表明在函数内要使用某外部变量。

在同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。

5.变量的存储类型

主要有四种,auto 自动变量(一般不加任何修饰的变量为自动变量,auto int   a, === int  a), static 静态变量, register 寄存器变量, extern 外部变量

自动变量和寄存器变量为动态分配,在程序执行过程中使用它时才分配存储单元,使用完毕即释放(一般是在函数结束时),典型的例子是函数的形参,在函数定义时并不给形参分配参数,只是在函数被调用时才分配,调用函数完毕即释放空间。

静态变量和外部变量为静态分配,即变量定义时就分配一定的存储空间并一直保持不变(存储空间不变).

6.静态变量

静态变量类型说明符为static, 静态变量分为静态局部变量和静态全局变量。

静态局部变量:

      静态局部变量在函数内定义它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出函数后,尽管该变量还继续存在,但不能使用它。

     允许对构造类静态局部变量赋初值,如果没有赋初值,则系统自动赋为0.

     基本类型的静态局部变量若在说明时未赋初值,则系统自动赋为0.

静态全局变量:

     存储方式为静态存储,生命周期为全周期。

7.const类型

const 可以定义常量,也可以定义const变量。

int  const * a,  //表示指向常数的指针类型,  其中指针a 指向的地址存放数据为常数,但指向的地址可以改变  

int * const a,  // 表示指向整数的常指针,即指针a指向数据为整型,且指向的地址为固定, 但地址存放的数据可以变化

查看const究竟指定了何种数据类型为常量要看const之前的数据类型。

8.++ i 和 i++

自增和自减运算符可用在操作数之前,也可用在操作数之后,但表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言就在引用操作数之前先执行加1或减1的操作,然后将值赋给前面变量;如果自增或自减运算符在操作数之后,C语言就在引用操作数之后执行加1或减1操作。

如i == 2, 此时j = i ++, 执行之后,i == 3, j == 2。。。若j = ++i,则i == j == 3

9 逗号表达式

表达式1, 表达式2, ……, 表达式n

求值过程是分别求出n个表达式的值,然后将表达式n的值作为整个表达式的值。

如 y = (x = a + b),  (b + c)

y等于整个逗号表达式的值,即表达式2 (b+c)的值,而x为第一个表达式的值。

10 条件运算符?

EXP1? EXP2:EXP3,如

max = (a>b)? a:b


11sizeof

sizeof为一个单目运算符,它的运算对象为变量或数据类型,运算结果为一个整数。

若运算对象为变量,则所求的结果是这个变量占用的内存空间字节数,若运算对象是数据类型,则所求结果是这种数据类型的变量占用的内存空间字节数。


12.void *memset(void *s, char ch, size_t n);

函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。【注意这是将目的空间每个字节每个字节的进行填充,故一般char , bool等单字节数据类型,直接用即可,而int, long等多字节数据类型,除了全部置零之外,不能直接用】memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法。


13.C语言中static函数

static函数只能在被定义的源文件中进行调用,不能被外部调用。


14.数组初始化 // 字符数组和字符串不同,字符数组末尾不需要有'\0' . 而字符串需要在末尾提供'\0'

(1)定义时全部初始化

char a[3] = {'a', 'b', 'c'}; //此时数组中只有3个字符,且没有'\0'结束符

(2)定义时部分初始化

char  b[4] = {'a', 'b'}; //此时只初始化前两个元素,后面的自动补0

(3)数组全部赋值

若想要对数组中的全部元素赋值,则可以忽略数组下标中的常量,此时,编译器会自动确定数组的大小

char a[] = {'a', 'c', 'b', 'd'};

注意此时[]  不能省略,并且,若单独定义 char a[], 也不行,必须加上数组长度。

数组的元素不能整体赋值,只能单个赋值,如若定义 "char a[10] = {'a'};  则只为数组的第一个元素赋值为 'a'


15.数组的下标不能用变量

16.字符串的初始化

字符串实际上是一种特殊的字符数组,它规定以'\0' 作为结束符的标识,并且以双引号来代表字符串里的内容。如“abc” 中 含有四个字符

{'a', 'b', 'c', '\0'}

(1) 按照字符数组方式初始化// 最后必须要加 '\0'

char  a[4] = {'a', 'b', 'c', '\0'}

(2) 按照字符串双引号方式初始化

char a[4] = {"abc"}


16.指向函数的指针

int (*p)();   //表示指针p 指向返回值为int类型的函数入口地址

int getvalue() {   return 3;}

p = getvalue; ( int (*p) = getvalue;  )


17.指针数组和数组指针

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4]     指针数组     

                 表示:数组a中的元素都为int型指针    

                 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]   数组指针     

                 表示:指向数组a的指针

                 元素表示:(*a)[i]  

注意:在实际应用中,对于指针数组,我们经常这样使用:

?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值