1. 程式人生 > >結構體陣列與指標

結構體陣列與指標

struct Student //定義的結構體型別 相當於int 、float這些型別 ,是使用者自定義的
{
    char name[20];
    int num;
    float score;


}s[5] = { { "nijiushidiao", 1, 99 }, { "nijiuqua",2, 89 } }, *p = s; /* s[5]、*p這些是這種型別的變數名,
他在函式體外面所以相當於全域性變數,如果在此分號前沒有定義變數那麼他僅僅就是使用者定義的的型別,不為他分配
記憶體空間,如:
struct student 
{
    int num;
    char name[20];
};系統就不會給他分配記憶體空間*/
int main() { printf("1 %f\n",p->score);/*列印99.000,相當於(*p).score,p存的是s結構體陣列的首元素的地址,這個元素 包括第一個學生的所有資訊(name,num,score),因此*p使進入結構體,此時*p不像二維陣列那樣還是地址,還可以 做*(*p+1)這樣的運算,因為結構體裡面的資料型別不一致,加一不知道加到哪,所以在結構體裡面*p就是進入 結構體並且看到了第一個學生的所有資訊並且通過.score將該學生的某一項資訊打印出來*/ printf("2 %d\n", *s);//列印一個奇怪的數字,具體這個數字怎麼來的有待研究,理解方法同上
printf("3 %d\n",sizeof( s));//列印140,在sizeof下s代表整個結構體陣列的大小 printf("4 %d\n",sizeof(s[0]));//列印28,第一個學生s[0]的大小 printf("5 %d\n", s);//列印18644992,首元素(包括第一個學生所有資訊)的地址 printf("6 %d\n", s+1);//列印18645020=18644992+28,加一加到下一個學生s[1]的地址 printf("7 %d\n", &s);//列印18644992,代表整個結構體陣列的地址加一就跳過所有學生,就到s[5]的下一個
printf("8 %d\n", &s + 1);// 列印18645132=18644992+140 printf("9 %d\n", &(p->name));//列印18644992,代表首位學生的name的地址,雖然值都一樣但意義不一樣 struct Student tmp = s[0]; *p = s[1]; s[1] = tmp; printf("%s--%d\n", p->name, p->num);//列印第二個學生的學號與姓名 printf("%s--%d\n",(p+1)->name,(p+1)->num);//第一個學生,代表在結構體裡面可以將整個學生資訊一次性交換,而一般陣列則不行 getchar(); }

相關推薦

結構陣列指標

struct Student //定義的結構體型別 相當於int 、float這些型別 ,是使用者自定義的 { char name[20]; int num; float sco

C語言——結構指標引用&結構陣列指標引用

接下來,程式的控制權交給Mutiline函式,進入函式Mutiline。在程式進入函式Mutiline之後,pPoints 指向oPoints的首地址,跟蹤程式表明此時變數pPoints的當前值為0X0F82。另外,由於陣列第一個元素oPoints[0]的地址與陣列的首地址相同。亦可以理解為此時pPoints

結構陣列指標初始化記憶體釋放

結構體如下: Typedef structstudent { Int num; Char* name; } Tom,*Lily; 如果定義成Tom的形式,不需要為結構體分配記憶體,但是需要對name分配記憶體 Tom.name =(char*)malloc(sizeof(

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

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

5. C 結構 陣列指標 初始化 記憶體釋放

結構體如下: struct student{ Int num; Char* name; } Tom,*Lily; 1.如果定義成Tom的形式,不需要為結構體分配記憶體,但是需要對name

☆ C/C++ 結構陣列typedef

記錄自己不經意間遇到的錯誤, 調了很久才發現是結構體這裡的問題:   ******************************************************************************************************

c語言指向結構陣列指標

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

指向結構陣列指標應用

#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

go語言結構陣列指標作為引數。。。

package main import ( "fmt" ) type XCDataStu struct { Id int `json:"id" xorm:"id"` Name s

第22節 C語言結構結構巢狀、結構指標結構陣列的程式碼實現

結構體 #include <stdio.h> //第一步 struct Student { //學號 int no; //姓名 char name[20]; //性別 char

指標輸出結構陣列【轉】

  (轉自:https://wenku.baidu.com/view/6511f01477c66137ee06eff9aef8941ea76e4bac.html) #include <stdio.h>  #include <string.h> #includ

求助!結構的二級指標陣列給一級指標初始化遇見的異常

百度也看了很多部落格都沒解決 主要程式碼如下 typedef struct HTNode { int weight; char c;//存這個字元,單個字元,符號都是葉子節點 int code; HTNode *lchild, rchild; }HuffmanTree; /

@結構陣列指向結構變數的指標

一、結構體陣列的定義 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } ; [stru

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

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

C語言 一個例子說明結構變數,結構陣列結構指標

輸入三個學生的個人資訊 包含學號 姓名和三門學科的成績 輸出平均成績最高的學生的學號 姓名 各科成績以及平均成績 程式碼如下(譚浩強c程式設計的例子) #include<stdio.h> struct Student {int num;

定長度結構陣列、不定長度結構指標初始化

定長度1: #include <stdio.h> #include <stdlib.h> typedef struct str { int a; int b; }Str; int main() { Str s[1]={{a

WSASendTo()WSARecvfrom()函式傳送wsabuf結構陣列

傳送端: void main() {    //---------------------------------------------  // Declare and initialize variables  WSADATA wsaData;  WSABUF Data

結構指標陣列 vs 結構陣列

文章內容來自StackOverFlow,文章在這裡。 下面兩個陣列的區別是什麼? 1.struct mystruct *ptr =(struct test *)malloc(n*sizeof(struct test)); and 2.struct mystruct

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

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