欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C学习笔记(3)---作用域,数组, (少量指针入门)

程序员文章站 2022-06-11 15:58:04
1. 作用域(scope):任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量. a. 在函数或块内部的局部变量 - 在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。 ......

1. 作用域(scope):任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。c 语言中有三个地方可以声明变量.

 

a. 在函数或块内部的局部变量

- 在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。

b. 在所有函数外部的全局变量

- 全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。全局变量可以被任何函数访问。也就是说,全局变量在声明后整个程序中都是可用的。

c. 在形式参数的函数参数定义中

- 函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用. 详情见:

 

sub: 

1.全局变量保存在内存的全局存储区中,占用静态的存储单元;   

局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。

正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果,因为未初始化的变量会导致一些在内存位置中已经可用的垃圾值。

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化.

 

2. 数组(array) 

定义:c 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

声明:double balance[10];

初始化: double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};     sub:大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。

 

a.多维数组(multidimensional array):

定义如下:int threedim[5][10][4]; 例子是个三维(3d)数组。

 

sub:

1. 二维数组在逻辑上是方阵,由行和列组成。

 

但是二维数组在物理上是线性的,按行来依次进行存放,内存是连续的。

 

二维数组名的步长是一行的长度。

 

2. 二维数组存放字符串,读取时当一维数组使用。

 

b.传递数组给函数:

如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。

例子见:

 

sub: 列举 c 语言传递二维数组的方法。

方法1: 第一维的长度可以不指定,但必须指定第二维的长度-- 例子:void print_a(int a[][5], int n, int m)

方法2: 指向一个有5个元素一维数组的指针:void print_b(int (*a)[5], int n, int m)

方法3: 利用数组是顺序存储的特性,通过降维来访问原数组 : void print_c(int *a, int n, int m)

 

c.从函数返回数组:

c不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

另外,c 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

例子:

 

 

d.指向数组的指针:

  

 double balance[50];    这个代码中,其实balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。

-------------------------------------

double *p;

double balance[10];

p = balance;

--------------------------------------    因此这段代码是合法的,p 赋值为 balance 的第一个元素的地址。   例子:

 

 3.c enum(枚举):

枚举是 c 语言中的一种基本数据类型,它可以让数据更简洁,更易读。

 

 

 

 引用: