天天看點

C語言基礎2(結構體)

#include<stdio.h>
  //b=a++  先使用(指派)  後++
  //b=+=a  先++ 後使用
  //"[]"下标引用操作符
  //“()”也是函數調用操作符
  //有符号數:符号歸到最高位的位置1 負數;0 正數;
  //隻要是整數,存儲的都是補碼!!!
  //自己定義的符号名,不能和C語言自帶的符号名沖突
  //typedef:類型定義、類型重定義
  //unsigned無符号定義
  //局部變量一但出了{}範圍就自動停止 并且銷毀了
  //static  int a ;  a是一個“靜态局部變量”。會儲存上一次留下的值!!!!! 作用:修飾局部變量 其生命周期延長了
  //static  修飾全局變量改變了變量的作用域,讓其隻能在自己所在的.c檔案裡面使用

  //聲明外部函數!!!!!:extern int f(x)(int ,int );

  //指針變量 專門用來存放位址的 int *p=&a;//位址用“%p”來輸出  p的類型是int *的 p還是變量!!!_
                                   //-p是一個指針變量(p所指向的那個對象a是int 類型的是以是"int*p";
  //*p  - 意思是通過p裡面的位址找到其代表的變量   (“*”叫解引用操作符、間接通路操作符)

////如:
//  int a = 10;
//  int *p = &a;
//  *p = 20;//改變了a的值
//  printf("a=%d\n", a);

//  double d = 3.14;
//  double *dp = &d;
//  *dp = 5.5;
//  printf("d=%lf\n", d);//double類型是lf

//指針變量的大小:32位的是 4 位元組;64位的是 8位元組!!!!!
  //無論什麼類型的指針;(int*,double,char,..)32位的大小都是4!!!!!64位都是8.


//結構體(例如 人或書。。複雜的對象不是簡簡單單用一個數字或符合就能表達的 其有許許多多屬性)
//結構體是自己創造出的類型!!!!!
//“struct”關鍵字來描述

struct BOOK   //描述一本書  
{
  char name[20];//描述書名 char-數組
  short price;//定義一個整數變量 price表示價格

};//“;”必須加上 其是為了結束類型定義的
int main(){
//利用結構體類型 建立結構體變量b1
struct BOOK b1={"C語言程式設計",55};   //建立一本書b1 書名C語言程式設計,價格55 整形數值不要“”包圍
printf("書名:%s\n",b1.name);//%s 字元串輸出符号  b1.name 表示其值是b1當中的書名
printf("價格:%d\n", b1.price);//價格其是一個數
b1.price = 15;//也可以修改其值
//隻有非數組操作符才能這樣指派修改!!!!!
strcpy(b1.name, "C++");//數組變量隻能用”strcpy()“函數函數修改 !!!!!!
printf("修改後的價格:%d\n", b1.price);

//struct BOOK b1 = { "C語言程式設計", 55 };  
//其類型是 struct BOOK為一個類型!!!!!
//如果要取位址:struct BOOK *p=&b1;!!!!!!!!
struct BOOK *p = &b1;
//利用指針變量p列印出其書名與價格!!!!!
printf("書名:%s\n", (*p).name);
printf("價格:%d\n", (*p).price);
//或可以簡化其 利用“->‘指向字元!!!!!
printf("書名:%s\n", p->name);
printf("價格:%d\n", p->price);

//其中“."操作符利用與結構體變量當中 ”.成員“可以找到成員
//    “->"利用的是結構體指針”->成員“可以找到成員
  return 0;
}

int main(){
  //隻有一個;分号的叫做“空語句”
  //if語句大于什麼并且小于什麼 使用的是邏輯與&&、或||
  //編譯器認為在沒有括号的情況下:else是與其離得最近的if進行比對的
  //輸出奇數1~100

  //int i = 1; 
  //while (i<100)
  //{
  //  if (i %2 == 1)
  //    printf("%d\n ", i);
  //    i++;
  //}
  //
  
  //switch (case的 整形表達式){case1:printf();break;  case2:printf();break; case3:printf();break; ...;default:.. }
      //break:跳出語句循環(不一定要全加)  case的後面必須是整形常量表達式!!!!!  default在所有case沒有滿足後用此輸出!
  //也可以:switch (case的 整形表達式){case1;case2;case3;cse4;case5;printf();case6;printf();break;}
      //可以把輸出類型相同的case結果放在一起!

  //getchar()-擷取字元 鍵盤内地!!!!!

  return 0;
}