關鍵字static和typedef

關鍵字static

1.static 修飾局部變量時,相當於改變了其生命週期,但不改變作用域
2.static 修飾全局變量,代表該變量僅在本文件內有效(沒有static 修飾 全局變量+聲明之後支持跨文件引用)
3.static 修飾函數,該函數只在本文件內被調用或訪問,不能跨文件訪問(函數本身在另一個文件+聲明之後支持跨文件引用)

對第一點的演示

沒有static 修飾情況下的局部變量

#include<stdio.h>
#include<Windows.h>
void  MyShow()
{
    int i = 0;
	i++;
	printf("%d\n", i);
}
int main()
{
	int j = 0;
	for (; j < 5; j++)
	{
		MyShow();
	}
	
    system("pause");
	return 0;
}

在這裏插入圖片描述
出了作用域 i 的生命週期和作用域均無效
每次執行 for 循環的時候 i 都會被重新創建與賦值

加上了 static 之後

#include<stdio.h>
#include<Windows.h>
void  MyShow()
{
    static int i = 0;
	i++;
	printf("%d\n", i);
}
int main()
{
	int j = 0;
	for (; j < 5; j++)
	{
		MyShow();
	}
	//printf("%d\n", i);   //這條語句如果加上會報錯未定義i 從而能證明i的作用域並未改變
    system("pause");
	return 0;
}

在這裏插入圖片描述

i 只在第一次調用的時候創建一次,此後執行i++語句 但注意只改變了 i的 生命週期,但不改變作用域

對第二點的演示

code.c

#include<stdio.h>
#include<windows.h>
int g_value = 10;//定義

test.c

#include<stdio.h>
#include<Windows.h>

extern int g_value;// 聲明

int main()
{
    printf("%d\n", g_value);
	system("pause");
	return 0;
}

結果就是輸出10

#include<stdio.h>
#include<windows.h>
static int g_value = 10;//定義

加上static 之後,報警,無法解析的外部符號g_value --鏈接性錯誤

定義與聲明
定義只能定義一次(開闢空間+防止內容),而聲明可以多次聲明

對第三點的演示
code.c

#include<stdio.h>
#include<windows.h>
 
static void  MyShow()
{
    int i = 0;
	i++;
	printf("%d\n", i);
}

test.c

#include<stdio.h>
#include<Windows.h>
extern  void MyShow();

int main()
{
	MyShow();
	system("pause");
	return 0;
}

與二原理相同,加上static 之後無法解析的外部符號MyShow --鏈接性錯誤

全局變量和函數混用 static
code.c

#include<stdio.h>
#include<windows.h>
 static int g_value = 10;//定義
 void  MyShow()  //如果 static void  MyShow()  會怎麼樣? 顯然報警告
{
	  static int i = 0;
	  for (; i < 5; i++)
	  {
		  printf("%d\n", g_value);
	  }
}

test.c

#include<stdio.h>
#include<Windows.h>
extern  void MyShow();

int main()
{
	MyShow();
	system("pause");
	return 0;
}

關鍵字typedef

#include<stdio.h>
#include<Windows.h>
typedef unsigned int unit;

int main()
{
	unsigned int num1 = 0;
	unit  num2 = 1;

	printf("%d\n", num1);
	printf("%d\n", num2);
	system("pause");
	return 0;
}

unsigned int 老的類型
unit 新的類型的名字 相當於 Int、 char 等等

unsigned 無符號

整型的每一種(int short long longlong)都有無符號(unsigned)和有符號(signed)兩種類型,在默認情況下聲明的整型變量都是有符號的類型,如果需聲明無符號類型的話就需要在類型前加上unsigned。
1、signed是默認的,表示這個變量是有符號的,可以存儲整數和負數。

2、unsigned則需要顯示給出表示這個變量,沒有符號值能存儲數的大小,而且不能表示正負。
signed存儲符號是有代價的,代價就是存儲空間中的一個比特位專門用來存儲符號,這一位不能表示數值。一般來說,同類型的signed能夠存儲的數的絕對值大小要小於undigned。

4、unsigned的作用就是將數字類型無符號化, 例如 int 型的範圍:-2^31 ~ 2^31 - 1,而unsigned int的範圍:0 ~ 2^32。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章