程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習筆記【結構體02】結構體指針變量與結構體變量的函數參數

C語言學習筆記【結構體02】結構體指針變量與結構體變量的函數參數

編輯:關於C語言

C語言學習筆記

之     結構體指針變量

一提指針,那可是C語言的核心了,有多少學子曾拜倒在指針的腳下。單純的說指針,其實並不難,但是與其它的結構搭配在一起,那可就愁死人了。比如說:數組一點都不難,但是與指針一起用,可就經常麻煩了。結構體也是一種結構,它與指針搭配怎麼樣呢? 一起來看一下吧!

1:結構體指針變量

和指針指向數組首地址一樣,指針也可以指向結構體的起始地址。

形式形如:  struct  student  *p;

上述語句定義了一個指針變量p,它指向任何一個屬於struct student 類型的數據。通過指針去訪問所指結構體變量的某個成員時,有兩種方法:

    (*p).score   或者   p->score(這是一種常用的方式。->是指向運算符)

比如:

訪問的時候:(*p).num=11031,或者 p->num=11031。

2.程序實例


#include <stdio.h>
/*定義結構體*/
struct student
{
   int num;
   char name[20];
   char sex;
   int age;
   float score;
};
/*初始化一個結構體實例*/
struct student stu[3]={
    {11302,"Wang",'F',20,486.69},
    {11303,"Zhao",'F',25,466.59},
    {11304,"Xue",'M',26,483.59}
};
main()
{
    /*初始化一個student1的實例*/
    struct student student1={11305,"Li",'F',19,59.59};
    struct student *p,*q;//定義struct student類型的指針
    int i;
    p=&student1;//將student 1的結構體的首地址賦給p,也就是p指向了student 1的首地址
    /*輸出:可以看到,訪問結構體的成員,有三種方法*/
    printf("%s,%c,%f\n",student1.name,(*p).sex,p->score);
    q=stu;//將數組stu的首地址賦給q;
    /*for循環輸出數組中的成員*/
    for(i=0;i<3;i++,q++)
    {
        printf("%s,%c,%f\n",q->name,(*q).sex,stu[i].score);
    }
}


3.指針符號->)

P->num

P指向的結構體中的成員

P->num++

先得到p所指向的結構體成員num,然後使該num的值加1

++p->num

先p所指向成員num的值加1,然後引用這個新的值

(p++)->num

先引用p->num的值,用完之後再使p加1

(++p)->num

先p加1,然後引用p->num的值

4.結構體變量和結構體指針變量做函數參數

 結構體變量以及結構體指針變量均可以像int類型那樣作為函數的參數。


#include <stdio.h>
/*定義結構體*/
struct student
{
   int num;
   char name[20];
   char sex;
   int age;
   float score;
};
/*初始化一個結構體實例*/
struct student stu[3]={
    {11302,"Wang",'F',20,486.69},
    {11303,"Zhao",'F',25,466.59},
    {11304,"Xue",'M',18,483.59}
};
/*輸出函數,結構體變量s做為函數參數*/
void print(struct student s)
{
   printf("%s,%d,%f\n",s.name,s.age,s.score);
}
/*增加成績的函數,結構體指針q作為函數參數*/
void add(struct student *q)
{
  if(q->age<=19)
      q->score=q->score+10;
}
main()
{
    struct student *p;
    int i;
    for(i=0;i<3;i++)
    {
      print(stu[i]);//stu[i]作為形參
    }
    for(i=0,p=stu;i<3;i++,p++)
    {
        add(p);//指向stu的指針變量p作為形參
    }
    printf("\n");
    for(i=0,p=stu;i<3;i++,p++)
    {
       print(*p);//*p作為形參,相當於stu[i]
    }
}


 上述程序注意的是:調用函數print和add都是void無返回值類型的函數,如果是有返回值的,它的類型應該是struct student類型,也就是說應該是

語言

struct student add(struct student *q)
{
  if(q->age<=19)
  q->score=q->score+10;
  return *q
}



本文出自 “趙玉強的博客” 博客,請務必保留此出處http://zhaoyuqiang.blog.51cto.com/6328846/1292014

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved