1. 程式人生 > >C語言之變數、常量(define\const)、變數的宣告和定義

C語言之變數、常量(define\const)、變數的宣告和定義

記憶體地址

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

void main(){
	int num = 10;
	int num1 = 20;
	int num2 = 30;
	//十進位制,記憶體地址
	printf("%d,%x",num,&num);
	printf("%d,%d", num1, num2);
	//開啟提示視窗
	MessageBoxA(0,"content","title",0);
	//開啟txt檔案的3中方式
	system("F:\\a.txt");
	system("\"F:\\a.txt\"");
	system("notepad F:\\a.txt");
	system("pause");
	
}


變數初始化

變數如果不初始化,可以編譯成功,但是執行的時候,可能報錯

每當應用程式開啟時,作業系統為其分配記憶體,當應用程式初始化執行時,就會往記憶體單元裡面寫資料,當作業系統回收時,不會清空記憶體單元,所以存在大量

垃圾資料,如果變數不進行初始化,就會預設讀取垃圾資料,有些垃圾資料導致程式崩潰

 我目前只能這樣理解了:如果一個值a沒有初始化,那麼直接printf("%d",a); 是不能編譯通過的,這個理所當然,但是如果在執行printf("%d",a);之前,先進行printf("%x",&a); 之後,在輸出十進位制就是可以的,這裡是不是因為由於輸出記憶體單元值,在應用內產生了垃圾值,然後由於沒有初始化,就拿垃圾值不確定的輸出了十進位制值?? 
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

void main(){
	//嚴格區分大小寫
	int a;
	int A;

    //printf("%x,%x",&a,&A);//為什麼去掉這行註釋就不會報錯了??
    printf("\n");

	printf("%d,%d", a, A);

	
	getchar();
}
常量
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

void main(){
	//常量方式1
	const int a = 5;
	printf("我的年齡是%d\n", a);

	const char nameStr[] = "wyf";
	const int age = 30;
	printf("我叫%s,%d歲\n",nameStr,age);
	//常量方式2  修改一次可以改變全域性  define本質就是替換
#define X 100  //不能有;
	printf("我有%d個\n", X);
	printf("我有%d個\n", X*X);

#define PI 3.1415
	int R = 100;
	printf("周長=%f,面積=%f\n", 2 * R*PI, PI*R*R);//f是實數

#define name "lilili"
	printf("我叫%s",name);


	getchar();
}

我的年齡是5

我叫wyf,30歲
我有100個
我有10000個
周長=628.300000,面積=31415.000000
我叫lilili

變數的宣告和定義

全域性變數有定義和宣告的差別,

全域性變數不賦值視作宣告,宣告可以有多個,預設值為0

全域性變數賦值視作定義,定義僅有一個

區域性變數沒有宣告和定義的差別

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

//全域性變數的宣告,宣告可以有多個,預設值為0
int a;
int a;
int a;
/*全域性變數賦值視作定義,定義僅有一個*/
//int b = 1;
//int b = 2;
//全域性變數的宣告,宣告可以有多個
void run();
void run();

void main(){
	//int c = 9;
	//int c = 10;
	printf("%d",a);
	run();
	getchar();
}

void run(){

}