Ⅰ 初學c語言對C指針的疑惑
說說我的理解大家討論:
1、C的變數都有四個基本屬性:名稱、類型、地址、內容,類型決定變數在內存占據的空間的大小和內容的存儲形式。指針是一種以內存地址作為內容的變數,若定義了一個指針變數,它和其他變數一樣具有自己的名稱,存儲地址和記錄的內容,指針數據類型的變數與其他數據類型的變數在存儲上的區別就是不論是什麼數據類型的指針所佔據的存儲空間的大小是相同的。這一點是完全可以理解的,因為不論什麼數據類型的數據、變數所佔據內存空間的地址形式都是一樣的,指針變數用來記錄他們的地址,在存儲空間的大小上自然就是沒有區別的。
但是這並不意味著指針變數的數據類型就沒有意義,它的作用在於決定這個指針在內存移動時,所移動的單位空間的大小。例如:在TC系統中每個整型變數佔2個位元組,實型變數佔4個位元組,字元型變數佔一個位元組;那麼如果定義一個 int *ip,a[10]; ip=a; 也就是說使ip記錄了數組a的首地址,那麼在做 ip=ip+1;後變數ip中記錄的就是 a[1] 的地址,你再繼續進行 (a+1)運算,計算的結果就是 a【2】的地址。
如果定義了float *fp,b[10]; fp=ba; 使fp記錄了數組b的首地址(也就是b【0】的地址),那麼在做 fp=fp+1;後變數fp中記錄的就是 b[1] 的地址,你再繼續進行 (b+1)運算,計算的結果就是 b【2】的地址。也就是說指針移動的一個單位的位元組數,是由指針的數據類型所決定的。
你對匯編熟悉,這一點是容易理解的吧。
在對指針變數被正確的賦值後,可以通過取值運算 * 取到由這個指針所指定的地址當中的內容(即由這個指針內容所決定的地址中的內容)。這個時候,完全可以想像指針的數據類型將起到決定性的作用,整型指針將按整數存儲形式取回2個位元組的內容,實型指針就按實數在內存的存儲形式取回4個位元組的內容。例如:float b【10】,*fp,y;經過必要運算之後,有運算 fp=b;y=*(fp+3);計算的結果是 y 記錄了b【2】的內容。
2、想要取回一個指針的地址,就需要一個相同數據類型指針類型的指針變數,例如 int *p,a=5,**pp;
p=&a; //p可以記錄相同數據類型變數的地址
pp=&p; //pp用於記錄相同數據類型指針的地址
&是C的取地址運算符。
3、我想在你對匯編很熟悉的基礎上,通過上述說明,不難體會定義指針的數據類型對於指針的作用了吧,也就是說某一種數據類型的指針在一般應用情況下,只用於記錄具有相同數據類型變數和存儲空間的地址。
這部分東西本身就是不容易理解,不知道說了半天是不是能幫上你一點。我想你有匯編的基礎,應該比一般的初學者要好很多的。
Ⅱ C語言程序結構的特點是什麼由哪些基本部分組成
C語言程序結構的特點是順序結構、選擇結構、循環結構。
1、順序結構,默認的流程結構,按照書寫順序執行每一條語句。
2、選擇結構,對給定的條件進行判斷,再根據判斷結果來決定執行那一段代碼。
3、循環結構,在給定條件成立的情況下,反復執行某一段代碼。只有滿足條件是才會執行循環體,特別注意是否進入了死循環。
(2)c語言的基本屬性擴展閱讀
C語言程序數據類型關鍵字
short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)
signed:修飾整型數據,有符號數據類型。(C89標准新增)
unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。(C99標准新增)
Ⅲ C語言中的數據類型詳解,它們的作用和如何用
1.類型:
整形,可以理解為整數
字元型 可以理解為單個字元,如字元『a','b','1'等
浮點型 可以理解為小數
2.型數據類型:
struct 可以理解為把不同的數據類型放在一起組成一個新的有意義:說到一說起人,你就會想到人具有身高,性別,年齡等屬性,人就是由身高,性別,年齡等放在一起構造的數據類型
struct person{
double shenggao;
char [] xingbie;
int nianling;
};
3.class(類)
在struct的基礎上加了對數據的操作,還有對數據訪問許可權的設置,還有對數據操作方法間得一些規定,設置,比如繼承等
4.數據結構和演算法
這個要一本書專門學習,有鏈表,樹,圖等
Ⅳ C語言是被什麼帶火起來的
(1)程序結構簡潔、緊湊、規整,表達式簡練、使用靈活。
(2)編寫的程序可讀性強,編譯效率高。
(3)具有豐富的運算符,多達34種。豐富的數據類型與豐富的運算符相結合,使C語言具有表達靈活和效率高等特點。
(4)數據類型種類繁多。C語言具有5種基本的數據類型和多種構造數據類型以及復合的導出類型,同時還提供了與地址密切相關的指針機器運算符。指針可以指向各種類型的簡單變數、數組、結構和聯合,乃至函數等。此外,C語言還允許用戶自己定義數據類型。
(5)是一種結構化程序設計語言,特別適合大型程序的模塊化設計。C語言具有編寫結構化程序所必需的基本流程式控制制語句,C語言程序是由函數集合構成的,函數各自獨立,並且作為模塊化設計的基本單位。
說明:
C語言的源文件,可以分割成多個源程序,分別進行編譯,然後連接起來構成可知性的目標文件,為開發大型軟體提供了極大的方便。C語言還提供了多種存儲屬性,使數據可以按其需要在相應的作用域起作用,從而提高了程序的可靠性。
(6)語法限制不太嚴格,程序設計自由度大。例如,對數組下標越界不作檢查,由程序編寫者自己保證程序的正確。一般的高級語言語法檢查比較嚴,能檢測出幾乎所有的語法錯誤,而C語言允許程序編寫者有較大的自由度,因此放寬了語法的檢查。程序員應當仔細檢查程序,保證其正確,而不要過分依賴C語言編譯程序去查錯。
(7)允許直接訪問物理地址,能進行位(bit)操作,能實現匯編語言的大部分功能,可以直接對硬體進行操作。因此,C語言既具有高級語言的功能,又兼容低級語言的許多功能,可用來編寫系統軟體。
(8)生成的目標代碼質量高,程序執行效率高。它一般只比匯編程序生成的目標代碼率低10%~20%。
(9)具有較高的可移植性。它的語句基本上無須修改就能用於各種型號的計算機和各種操作系統。
C語言是處於匯編語言和高級語言之間的一種中間型程序設計語言,常被稱為中級語言。它既有高級語言的基本特點,又具有匯編語言面向硬體和系統,可以直接訪問硬體的功能。
Ⅳ c語言的基本組成單位是什麼啊
在C語言中,函數是程序的基本組成單位。一個函數由函數的說明部分組成。包括函數名、函數類型、函數屬性、函數參數名、形式參數類型。結構化程序設計的思想就是把一個問題分解成多個小的問題,每一個小問題都解決了,大問題也就解決了。C語言的函數就是實現結構化程序設計而建立的一個基本單位,如同生物學上的細胞。
C程序的基本組成單位是 函數
這是學習C語言最基本的常識,怎麼會是語句呢
C程序是由函數構成的。函數是C程序的基本組成單位。一個C源程序中僅有一個main()函數,除main函數之外可以有若干個其它的函數。每個函數實現某一特定的操作。因此,函數是C程序的基本單位。
一個函數由兩部分組成:
函數的說明部分。包括函數名、函數類型、函數屬性、函數參數(形式參數)名、形式參數類型。
函數體,即{ }中的內容,
一般包括: 變數定義
執行部分
每個函數的結構如下:
函數名()
{
語句;
}
函數的定義是相對獨立的。主函數可在其它函數的定義之前,也可以在後,但程序的執行總是從主函數開始的。
Ⅵ c語言程序的基本單位是什麼
C語言程序是由函數構成的,函數是C程序的基本組成單位,一個C語言程序中僅有一個main()函數,除main函數之外可以有若干個其它的函數,每個函數實現某一特定的操作。
拓展資料:
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。 2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
Ⅶ 什麼是C語言的基本數據類型我想知道基本數據類型的定義!謝謝~~~
數據類型是編程語言中為了對數據進行描述的定義,因為對於機器不能識別數據,而不同數據間的相互運算,在機器內部的執行方式是不一樣的.這就要用戶先定義數據的特性再進行其它操作.這里的特性也就是數據類型.
常見的數據類型有:
int 整型 double雙精度浮點型 float浮點型
char 字元型 long 長整型......
Ⅷ 學習C語言需要掌握哪些基本知識
1.入門程序
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
2.數據類型
數據類型:
1.基本數據類型:
1.1. 整型:int 4個位元組
1.2. 字元型:char 1個位元組
1.3. 實型(浮點型)
1.3.1.單精度型:float 4個位元組
1.3.2.雙精度型:double 8個位元組
%d:十進制整數;
%c:單個字元;
%s:字元串;
%f:6位小數;
- #include <stdio.h>
- int main()
- {
- int age = 18;
- float height = 1.85;
- char unit = 'm';
- printf("小明今年%d歲 ", age);
- printf("小明身高%f%c ", height, unit);
- printf("小明現在在慕課網上學習IT技術 ");
- return 0;
- }
- #include <stdio.h>
- #define POCKETMONEY 10 //定義常量及常量值
- int main()
- {
- printf("小明今天又得到%d元零花錢 ", POCKETMONEY);
- return 0;
- }
表達式1 ? 表達式2 : 表達式3;
- #include <stdio.h>
- int main()
- {
- //定義三位數num,個位數sd,十位數td,百位數hd
- int num, sd, td, hd;
- //循環所有三位數
- for( num=100 ; num<1000 ; num++ )
- {
- //獲取三位數字num百位上的數字
- hd = num/100 ;
- //獲取三位數字num十位上的數字
- td = num/10%10 ;
- //獲取三位數字num個位上的數字
- sd = num%10 ;
- //水仙花數的條件是什麼?
- if(num ==hd*hd*hd+td*td*td+sd*sd*sd )
- {
- printf("水仙花數字:%d ", num);
- }
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int i, j, k;
- for(i=1; i<5; i++)
- {
- /* 觀察每行的空格數量,補全循環條件 */
- for( j=i ; j<5 ; j++ )
- {
- printf(" "); //輸出空格
- }
- /* 觀察每行*號的數量,補全循環條件 */
- for( k=0 ; k<2*i-1 ; k++ )
- {
- printf("*"); //每行輸出的*號
- }
- printf(" "); //每次循環換行
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int sum = 0;
- int i;
- for(i=1; i<=10; i++)
- {
- printf("%d ", i);
- if(i==3){
- goto LOOP;//滿足條件就執行goto語句
- }
- }
- //執行goto
- LOOP:printf("結束for循環了...."); //請選擇合適位置添加標識符
- return 0;
- }
形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。
實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值等辦法使實參獲得確定值。
在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生類型不匹配」的錯誤。
- #include <stdio.h>
- int getPeachNumber(int n) //這里要定義n,要不編譯器會報錯!
- {
- int num;
- if(n==10)
- {
- return 1;
- }
- else
- {
- num = (getPeachNumber(n+1)+1)*2;
- printf("第%d天所剩桃子%d個 ", n, num);
- }
- return num;
- }
- int main()
- {
- int num = getPeachNumber(1);
- printf("猴子第一天摘了:%d個桃子。 ", num);
- return 0;
- }
用關鍵字auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為「自動存儲類別」,屬於動態存儲方式。
用static修飾的為靜態變數,如果定義在函數內部的,稱之為靜態局部變數;如果定義在函數外部,稱之為靜態外部變數。
為了提高效率,C語言允許將局部變數的值放在CPU中的寄存器中,這種變數叫「寄存器變數」,用關鍵字register作聲明。
用extern聲明的的變數是外部變數,外部變數的意義是某函數可以調用在該函數之後定義的變數。
- #includ <stdio.h>
- //來源公眾號:C語言與CPP編程
- int main()
- {
- //定義外部局部變數
- extern int x;
- return 0;
- }
- int x=100;
數據類型 數組名稱[長度n] = {元素1,元素2,元素3,......};
數據類型 數組名稱[] = {元素1,元素2,元素3,......};
數類類型 數組名稱[長度n]; 數組名稱[0] = 元素1;數組名稱[1] = 元素2;...... 注意: 1、數組的下標均以0開始; 2、數組在初始化的時候,數組內元素的個數不能大於聲明的數組長度; 3、如果採用第一種初始化方式,元素個數小於數組的長度時,多餘的數組元素初始化為0; 4、在聲明數組後沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。
- #include <stdio.h>
- int main()
- {
- int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int i;
- for(i=0;i<10;i++)
- {
- printf("%d ",arr[i]);
- }
- return 0;
- }
數組的冒泡排序
字元串與數組
char 字元串名稱[長度] = "字元串內容";
char 字元串名稱[長度] = {'字元串1','字元串2',....,'字元串n','
2.構造類型:
2.1.枚舉類型
2.2.數組類型
2.3.結構體類型
2.4.共用體類型
3.指針類型:
4.空類型:
3.格式化輸出語句
學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣
已失效
4.常量
值不發生改變的量成為常量;
定義字元常量(注意後面沒有;)
5.運算符
5.1.算數運算符:+,-,*,/,%,++,--;前++/--,先運算,再取值.後++/--,先取值,再運算;
5.2.賦值運算符:
5.3.關系運算符;
5.4.邏輯運算符;
5.5.三目運算符:
6.水仙花數計算
輸出所有三位數的水仙花數字
所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數,如:153就是一個水仙花數,153=111+555+333。
7.列印正三角形的*
8.臭名遠揚的goto語句
很少使用
9.形參與實參
形參:形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數;
實參:實參是在調用時傳遞該函數的參數。
函數的形參和實參具有以下特點:
10.函數返回值注意
注意:void函數中可以有執行代碼塊,但是不能有返回值,另void函數中如果有return語句,該語句只能起到結束函數運行的功能。其格式為:return;
11.遞歸
12.變數存儲類別 !
12.1.生存周期劃分存儲方式
C語言根據變數的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。
靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變數,如全局變數。
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變數是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變數;函數調用時的現場保護和返回地址等。
12.2.存儲類型劃分
C語言中存儲類別又分為四類:自動(auto)、靜態(static)、寄存器的(register)和外部的(extern) ;
注意:靜態局部變數屬於靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變數在編譯時賦初值,即只賦初值一次;如果在定義局部變數時不賦初值的話,則對靜態局部變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)
注意:只有局部自動變數和形式參數可以作為寄存器變數;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變數;局部靜態變數不能定義為寄存器變數。
13.內部函數外部函數 !
在C語言中不能被其他源文件調用的函數稱為內部函數 ,內部函數由static關鍵字來定義,因此又被稱為靜態函數,形式為:
static [數據類型] 函數名([參數])
這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
在C語言中能被其他源文件調用的函數稱為外部函數 ,外部函數由extern關鍵字來定義,形式為:
extern [數據類型] 函數名([參數])
C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。 extern可以省略; 14.數組 數組:一塊連續的,大小固定並且裡面的數據類型一致的內存空間, 數組的聲明:數據類型 數組名稱[長度n]
15.數組遍歷
冒泡排序的思想:相鄰元素兩兩比較,將較大的數字放在後面,直到將所有數字全部排序。
在C語言中,是沒有辦法直接定義子字元串數據類型的,需使用數組來定義所要的字元串,形式如下: