1. 程式人生 > >c語言指向結構體陣列的指標

c語言指向結構體陣列的指標

 c指標變數可以指向一個結構陣列,這時結構指標變數的值是整個結構陣列的首地址。結構指標變數也可指向結構陣列的一個元素,這時結構指標變數的值是該結構陣列元素的首地址。

設ps為指向結構陣列的指標變數,則ps也指向該結構陣列的0號元素,ps+1指向1號元素,ps+i則指向i號元素。這與普通陣列的情況是一致的。

【例11-6】用指標變數輸出結構陣列。
  1. structstu{
  2. int num;
  3. char *name;
  4. char sex;
  5. float score;
  6. }boy[5]={
  7. {101,"Zhou ping",'M',45},
  8. {102,"Zhang ping",'M',
    62.5},
  9. {103,"Liou fang",'F',92.5},
  10. {104,"Cheng ling",'F',87},
  11. {105,"Wang ming",'M',58}
  12. };
  13. main(){
  14. structstu *ps;
  15. printf("No\tName\t\t\tSex\tScore\t\n");
  16. for(ps=boy;ps<boy+5;ps++)
  17. printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
  18. }
在程式中,定義了stu結構型別的外部陣列boy並作了初始化賦值。在main函式內定義ps為指向stu型別的指標。在迴圈語句for的表示式1中,ps被賦予boy的首地址,然後迴圈5次,輸出boy陣列中各成員值。


應該注意的是,一個結構指標變數雖然可以用來訪問結構變數或結構陣列元素的成員,但是,不能使它指向一個成員。也就是說不允許取一個成員的地址來賦予它。因此,下面的賦值是錯誤的。
    ps=&boy[1].sex;
而只能是:
    ps=boy;(賦予陣列首地址)
或者是:
    ps=&boy[0];(賦予0號元素首地址)

相關推薦

c語言指向結構陣列指標

 c指標變數可以指向一個結構陣列,這時結構指標變數的值是整個結構陣列的首地址。結構指標變數也可指向結構陣列的一個元素,這時結構指標變數的值是該結構陣列元素的首地址。設ps為指向結構陣列的指標變數,則ps也指向該結構陣列的0號元素,ps+1指向1號元素,ps+i則指向i號

C語言】用結構陣列指標完成:有三個學生資訊,存放在結構陣列中,要求輸出全部資訊

//用結構體陣列指標完成:有三個學生資訊,存放在結構體陣列中,要求輸出全部資訊 #include <stdio.h> struct Stu { int num; char name[2

C語言經典例項】-指向結構指標變數

本例項通過結構體指標變數實現在窗體上顯示學生資訊,執行程式後,將學生資訊輸出在窗體上,效果如圖所示: 在本例項中,我們先宣告一個結構體變數,並定義一個指標變數指向struct student型別的資料,程式碼如下: #include<stdio.h> #inc

C語言結構包含指向自己的指標

執行環境:VC6.0 例子程式:tets.c ************************************************************************************************* #include <stdio.h> struct x

C語言_指向結構指標_plusC14.4

#include<stdio.h> #define LEN 20 struct name {char first[LEN];char last[LEN]; }; struct guy {struct name handle;char favfood[LEN];c

C語言結構中字串的宣告(採用字元指標還是字元陣列

      結構體中,字串選項是用字元陣列表示好,還是用字元指標表示好? typedef struct person{ char *name; int age; char sex[6]; }       該結構體中name用的是指標而不是陣列,所以需要給字串在堆上申

C 語言結構相關 的 函式 指標 陣列

.作者 : 萬境絕塵.結構體概述 : 結構體是 多個 變數的集合, 變數的型別可以不同;-- 可進行的操作 : 結構體可以進行 拷貝 賦值操作, 可以作為 函式引數 和 函式返回值;1. 結構體的基本使用結構體宣告 : struct 結構標記 {結構成員} 普通變數;-- 結

c語言結構陣列指標

#include<stdio.h> #define N 3 struct student { long int num; char name[20]; float score[3]; float aver; }; int main() {

指向結構變數的指標指向結構陣列指標使用時的區別

指向結構體變數的指標與指向結構體陣列的指標在使用時的區別就是:指向結構體變數的指標,在使用時這樣寫:struct rsol v;struct rsol *m;m = &v;指向結構體陣列的指標,在使用時這樣寫:struct edc hj[5]={1,2,3,4,5};

C語言結構指標的定義和引用

指向結構體型別變數的使用 首先讓我們定義結構體: struct stu { char name[20]; long number; float score[4]; } ; 再定義指向結構體型別變數的指標變數: struct stu *p1, *p2 ; 定義指標變數p 1、p 2,分別指向結構體型別變數。

C語言結構中一級指標和二級指標的建立與釋放示例

這幾天把C語言鞏固了一下,作為一門最基本的程式語言,C語言還是相當基礎和非常重要的,個人認為C語言還是很有必要學好吃透的。 今天寫的話題是結構體結構體中一級指標和二級指標的建立與釋放,以一個例子來說明,筆者這裡自己敲得程式碼,雖然用C語言幾年了,但是有的東西還是會遺忘。筆者

指向結構陣列指標應用

#include <stdio.h>struct stu{ int num; char name[10]; float score;}st[3] = {11,"Maggie",69,12,"Jeny",92.13,13,"Jesse",92.69};/* 也可以這樣初始化:st[3] = {{11

C 語言通過結構成員獲得結構指標

通過結構體成員拿到結構體的指標,是C語言實現繼承多型的基礎。面向物件C程式設計可以參看這裡OOC 面向物件C語言程式設計實踐。這裡詳細介紹這個核心的操作方法。 /** * Get struct pointer from member pointer */ #defin

C#呼叫c++Dll結構陣列指標的問題

C#呼叫c++dll檔案是一件很麻煩的事情,首先面臨的是資料型別轉換的問題,相信經常做c#開發的都和我一樣把學校的那點c++底子都忘光了吧(語言特性類)。 網上有一大堆得轉換對應表,也有一大堆的轉換例項,但是都沒有強調一個更重要的問題,就是c#資料型別和c++資料型別佔

C語言_結構巢狀和字串陣列的表示_plusC14.3

#include<stdio.h> #define LEN 20 const char *mgs[5]= {"qqqq","wwww","EEEEEEE","RRRR","TTTTT" }; struct apple {char smell[LEN];char

C語言結構與字元陣列之間的相互轉換

#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma  pack(push)  //儲存對齊狀態   #pragma  pack(1)   typedef st

C語言複習 -- 結構指標與自增運算子

測試程式碼: #include <stdio.h> #include <stdlib.h> int main() {  struct student {   char *name;   int score;  };  struct stud

C++】指向結構變數的指標

#include"iostream" #define N 10 using namespace std; //指向結構體變數的指標 struct Student { int numb; char *

C語言結構巢狀一級指標和二級指標

指標是C語言的精華,也是c中最難的部分;為了鍛鍊和提高自己對指標的理解,特在結構體中巢狀一級指標和二級指標來加深對。 #include<stdio.h> #include <string.h> #include<stdlib.h&