當前位置:首頁 » 編程語言 » c語言指針與結構體用法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言指針與結構體用法

發布時間: 2023-01-02 08:34:50

1. c語言結構體指針

->的優先順序高於++,

所以++pt–>x,是把x的值加1

2. 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、相同的結構體變數是可以這么賦值的,所以說』=『確實完成了復雜的操作。這個可以看具體的編譯出來的匯編指令就行了。

3. c語言結構體指針如何定義和使用

struct stu
{
char name[20];
long number;
float score[4];
} ;
再定義指向結構體類型變數的指針變數:
struct stu *p1, *p2 ;
定義指針變數p 1、p 2,分別指向結構體類型變數。引用形式為:指針變數→成員;

4. c語言中指針怎麼使用

1、使用場景

使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a數組首地址

//*b=2; 無法直接初始化

//printf("%d ", *b);

e=e+2; //移動兩個地址單元

d=&c; //d指向c的地址來表示值

c=4; //修改原c變數的值,d指針的值會發生改變

b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲

*b=2;//分配空間後可以直接賦值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、類型說明

(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元

(2)char *b:表示一個指向char變數的指針

*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(4)c語言指針與結構體用法擴展閱讀:

指針的運算

指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算

(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

結果輸出2。

參考資料來源 :指針-網路

5. C語言 結構體 指針的用法 程序解釋

typedef struct
{
uint8 cmd_head;
uint8 cmd_type;
uint8 ctrl_msg;
uint16 screen_id;
uint16 control_id;
uint8 param[256];//可變長度參數,最多256個位元組
}CTRL_MSG,*PCTRL_MSG;

相當於
struct __CTRL_MSG {
uint8 cmd_head;
uint8 cmd_type;
uint8 ctrl_msg;
uint16 screen_id;
uint16 control_id;
uint8 param[256];//可變長度參數,最多256個位元組
};

typedef struct __CTRL_MSG CTRL_MSG;
typedef struct __CTRL_MSG *PCTRL_MSG;

6. 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中聯表示比較難以理解的一部分,祝你好運,學業有成。

7. 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地址,可以找到對應伺服器上的網頁)

8. C語言結構體與指針

前面的typedef關鍵字和struct連用,代表把Inode定義為struct node。
也就是說Inode和struct node等價。
Inode *h就等於struct node *h,定義了一個指向struct node結構體的指針。

9. 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碼)