⑴ c語言中的基本類型和構造類型以及指針類型還有空類型,它們之間有何區別非常感謝!!!
1. 基本數據類型:基本數據類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數據類型是自我說明的。
2. 構造數據類型:構造數據類型是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型的值可以分解成若干個「成員」或「元素」。每個「成員」都是一個基本數據類型或又是一個構造類型。在C語言中,構造類型有以下幾種:
•數組類型
•結構體類型
•共用體(聯合)類型
3. 指針類型:指針是一種特殊的,同時又是具有重要作用的數據類型。其值用來表示某個變數在內存儲器中的地址。雖然指針變數的取值類似於整型量,但這是兩個類型完全不同的量,因此不能混為一談。
4.空類型:在調用函數值時,通常應向調用者返回一個函數值。這個返回的函數值是具有一定的數據類型的,應在函數定義及函數說明中給以說明,例如在例題中給出的max函數定義中,函數頭為:int max(int a,int b);其中「int 」類型說明符即表示該函數的返回值為整型量。又如在例題中,使用了庫函數sin,由於系統規定其函數返回值為雙精度浮點型,因此在賦值語句s=sin (x);中,s 也必須是雙精度浮點型,以便與sin函數的返回值一致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數,調用後並不需要向調用者返回函數值,這種函數可以定義為「空類型」。其類型說明符為void。
⑵ C語言的結構體及指針
結構體就像數組一樣,其中的數據是有互相聯系的,有些情況下定義一些簡單的變數是不能反映出數據之間的內在聯系,所以我們就把這些數據組合成一個項,而這個項中包含著很多不同的數據項,這就是結構體。
簡單理解下,就是說把一些有內在聯系的不同變數放在一起封裝成一個整體,這就是結構體。
指針,其實就是一個存放地址的變數,指針可以指向變數,數組,結構體等數據所在的內存單元。
指針就是用來通過地址去找數據的,只要你把該數據的地址給指針,那麼當你用到指向這個數據的指針時就等於在使用該數據。
⑶ C語言結構體與指針
前面的typedef關鍵字和struct連用,代表把Inode定義為struct node。
也就是說Inode和struct node等價。
Inode *h就等於struct node *h,定義了一個指向struct node結構體的指針。
⑷ c語言指針和結構體
樓主你好:
for(i=cnt;i>0;i--)
{/*P為臨時結構體指針*/
p=(struct linklist *)malloc(sizeof(linklist));
scanf("%s%s%d",p->sno,p->sname,&p->sgrade);
p->next=ps->next;
ps->next=p;
}
你仔細看一下你的這段代碼。
第一次循環的時候,p指向ps指向的地址,然後ps指向p,這樣的結果是:ps--->p---->p->next
然後下一次循環,ps->next現在是p,你執行了「p->next=ps->next」那麼p指向了p自己。。。而ps指向了p。在以後的循環中無法改變這一現象,從而造成了死循環,不知道你是不是能夠明白,推薦你畫一下圖,畫畫就明白了。
還有最後的那個for循環,終止條件改為p=p->next,這個應該是粗心了吧?
看起來你是初學c,c中聯表示比較難以理解的一部分,祝你好運,學業有成。
⑸ C語言指針和結構體
void fun(char *p,int n)//p:指向字元數組首地址的指針,n:一個整數
{
int i;
if((i=n/10)!=0) //取得最高位數的值
fun(p+1,i); //遞歸調用函數fun()
*p=n%10+'0'; //將整數值裝換為字元,即(3轉換為'3'),然後存入字元數組中
}
下面是詳細的調用過程:str[]數組就是實參
調用fun(str[0],3567);
i=3567/10==356(!=0);
遞歸調用fun(str[1],356);
i=356/10==35(!=0);
遞歸調用fun(str[2],35);
i=35/10==3(!=0);
遞歸調用fun(str[3],3);
i=3/10==0;
*p==str[3]=3%10+'0';(3%10==3然後再加上'0'(看成字元'0'的ASCII碼)就是字元'3'的ASCII碼)
*p==str[2]=35%10+'0';(35%10==5然後再加上'0'(看成字元'0'的ASCII碼)就是字元'5'的ASCII碼)
*p=str[1]==356%10+'0';(356%10==6然後再加上'0'(看成字元'0'的ASCII碼)就是字元'6'的ASCII碼)
*p=str[0]==3567%10+'0';(3567%10==7然後再加上'0'(看成字元'0'的ASCII碼)就是字元'7'的ASCII碼)
⑹ c語言 結構體變數及結構體變數指針
1、printf("B=%d\n",B); 這種寫法是將B強制轉換成int類型,然後列印出來,即把B最開始的4個位元組按照int類型來列印,B的最開始是mahj,內存裡面放的即0x6D61686A,轉換成10進制就是1785225581這個東東了。
至於*C和*(C+1),printf("*C=%c,*(C+1)=%c\n",*C,*(C+1));這種寫法會把C當成int *類型,所以C+1就變成了第五個字元,列印出來的就是K了,沒有矛盾的。
2、相同的結構體變數是可以這么賦值的,所以說』=『確實完成了復雜的操作。這個可以看具體的編譯出來的匯編指令就行了。
⑺ C語言結構體指針
->的優先順序高於++,
所以++pt–>x,是把x的值加1
⑻ C語言的結構體及指針
int 是一種 數據類型
結構體 是一種 數據類型
int 是C語言預先定義好的 數據類型
結構體 是用現有的數據類型組合起來的 數據類型
我需要一個變數來存儲整數, C語言已經有int這樣的數據類型,我就直接聲明一個int型變數:int a; 再把數據存進去 a = 1; 再以後的程序中就可以用a來代替1,如果我願意,我也可以把其他的整數放在a裡面:a =2;
我需要一個變數來存儲(x, y)這樣的坐標, C語言沒有預先定義這樣的數據類型,我就用現有的類型組合一個新類型出來:struct pos{int x; int y}, 再聲明一個這樣的變數:pos my_pos; 再把數據(1,2)存進去:my_pos.x = 1; my_pos.y = 2; 以後我可以用my_pos表示(1,2)這樣的數據,我也可以讓它表示其他的點my_pos.x = 4; my_pos.y = 5; 現在my_pos就可以表示(4,5)這個點的坐標了。
也就是說,結構體允許我們創建自己的數據類型,然後像使用系統中已經有的數據類型那樣來使用結構體。兩者的區別是:像int這樣的類型,一般是直接聲明,然後就可以用來存取整形數據了,而結構體需要先定義了,然後才能聲明這種類型的變數,進而用來存取數據。
指針:指針也是一種數據類型
int類型變數存儲整形數據
指針類型變數存儲地址
訪問int型變數的結果是得到一個整數,可以用來做加減乘除。
訪問指針類型變數的結果是得到一個地址,通過這個地址,可以找到位於這個地址的實際數據。(好比通過一個伺服器ip地址,可以找到對應伺服器上的網頁)
⑼ c語言,結構體,字元型指針,賦值
#include<stdio.h>
#include<malloc.h>
#include<string.h>
structTest
{
intid;
char*name;
};
int
main(intargc,char**argv)
{
structTest*test;
test=malloc(sizeof(structTest));
test->id=0;
test->name=malloc(sizeof(500));
strcpy(test->name,"helloworld");
printf("%d%s",test->id,test->name);
return0;
}
基本上不就這樣么。
⑽ C語言有關結構體和指針的問題
比如
struct LNode{
element data;
struct LNode *next;
}*Linklist;
LNode是結構變數名;
Linklist就是指針,指向該結構體的指針。
調用內部應為:結構變數名.成員名