C语言---Day5

发布时间 2024-01-09 20:33:53作者: o·0

13、作用域规则

---C 语言中有三个地方可以声明变量:在函数或块内部的局部变量; 在所有函数外部的全局变量; 在形式参数的函数参数定义中

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

int main ()
{
  /* 局部变量声明 */
  int a, b;
  int c;
 
  /* 实际初始化 */
  a = 10;
  b = 20;
  c = a + b;
 
  printf ("value of a = %d, b = %d and c = %d\n", a, b, c);  // value of a = 10, b = 20 and c = 30
 
  return 0;
}

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

/* 全局变量声明 */
int g;
 
int main ()
{
  /* 局部变量声明 */
  int a, b;
 
  /* 实际初始化 */
  a = 10;
  b = 20;
  g = a + b;
 
  printf ("value of a = %d, b = %d and g = %d\n", a, b, g); // value of a = 10, b = 20 and g = 30
 
  return 0;
}

---在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用

/* 全局变量声明 */
int g = 20;
 
int main ()
{
  /* 局部变量声明 */
  int g = 10;
 
  printf ("value of g = %d\n",  g); // value of  g = 10
  return 0;
}

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

/* 添加两个整数的函数 */
int sum(int a, int b)
{
    printf ("value of a in sum() = %d\n",  a); 
    printf ("value of b in sum() = %d\n",  b);
 
    return a + b;
}

/* 全局变量声明 */
int a = 20;
 
int main ()
{
  /* 在主函数中的局部变量声明 */
  int a = 10;
  int b = 20;
  int c = 0;
  int sum(int, int);
 
  printf ("value of a in main() = %d\n",  a); // value of a in main() = 10
  c = sum( a, b);    // value of a in sum() = 10  , value of b in sum() = 20
  printf ("value of c in main() = %d\n",  c);  // value of c in main() = 30
 
  return 0;
}

---全局变量与局部变量在内存中的区别:

  • 全局变量保存在内存的全局存储区中,占用静态的存储单元;
  • 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。

 

14、数组

---声明数组:需要指定元素的类型和元素的数量

double balance[10];

---初始化数组:可以逐个初始化数组,也可以使用一个初始化语句

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

            ---大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目,如果省略掉了数组的大小,数组的大小则为初始化时元素的个数

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

            ---赋值:为数组中某个元素赋值

balance[4] = 50.0;  // 把数组中第五个元素的值赋为 50.0

---访问数组元素:通过数组名称加索引进行访问

double salary = balance[9];

eg 输出:Element[0] = 100   Element[1] = 101  ...................................   Element[9] = 109

// 输出数组中的10个数
int main ()
{
   int n[ 10 ]; /* n 是一个包含 10 个整数的数组 */
   int i,j;
 
   /* 初始化数组元素 */         
   for ( i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; /* 设置元素 i 为 i + 100 */
   }
   
   /* 输出数组中每个元素的值 */
   for (j = 0; j < 10; j++ )
   {
      printf("Element[%d] = %d\n", j, n[j] );
   }
 
   return 0;
}

---获取数组长度:使用 sizeof 运算符来获取数组的长度

int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(array[0]);

printf("数组长度为: %d\n", length);  // 数组长度为: 5

              ---宏定义

#define LENGTH(array) (sizeof(array) / sizeof(array[0]))

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int length = LENGTH(array);

    printf("数组长度为: %d\n", length);  // 数组长度为:5

    return 0;
}

---数组名:数组名表示数组的地址,即数组首元素的地址; 在声明和定义一个数组时,该数组名就代表着该数组的地址,使用&运算符来获取数组的地址

int myyArray[5] = { 10, 20, 30, 40, 50 };
int* ptr = &myyArray[0]; 

             ---数组名用于指针运算,在函数传递参数或遍历数组时运用