2015.08.21 结构体指针

   1、 //整形指针指向整型变量的指针

   int *p = NULL;//指针的标识,告诉编译器这是个指针变量

    int a = 10;

    p = &a;   

    printf("%d\n",*p);//取出指针变量p指向内存中的值

  *p = 20;//*向指针变量p指向的内存中存储数据

   //浮点型指针:指向浮点型变量指针;

  float *p1 = NULL;

  float b = 3.14;

   p1 = &b;   printf("%.2f\n",*p1);   

   //字符型指针:指向字符型变量的指针

  char *p2 = NULL;

    char c = 'a';

   p2 = &c;

    printf("%c\n",*p2); 

  //总结:什么类型的指针,就是这个指针指向什么类型的变量

2、结构体指针的格式

指针的定义的格式:类型标示符 *指针变量名 =初始值;

结构体的首地址,就是结构体第一个成员变量的首地址

//    int *p1 = NULL;
//    int a = 20;
//    p1 = &a;

//   *p1  等价于 a

//        ->   指向操作符

//   ->   前面只能是结构体指针变量,而且必须是指向结构体变量首地址的结构体指针变量

3、经典例题——————————————————

//定义一个老师的结构变量“LiWu hua”

//通过结构体指针将姓名中的首字母改为大写,并把' ' 改为'_';

//    Teacher teacher2 = {"xia yin jun",30,"playPlane"};
//    t = &teacher2;//指针的重指向
//    if (t->name[0] >= 'a' && t->name[0] <= 'z') {
//        t->name[0] -= 32;
//    }
//    
//    int i = 0;
//    while (t->name[i] != '\0') {
//        if (t->name[i] == ' ') {
//            t->name[i] = '_';
//        }
//        i++;
//    }

//    printf("%s%d %s\n",t->name,t->age,t->hobby);

4、公式:

//结构体数组和指针

    Student stu[5] = {
        {1,"guanXi",'m',19,90},
        {3,"tingFeng",'m',20,91},
        {2,"boZhi",'w',18,99},
        {5,"liZongRui",'y',30,59},
        {4,"zhaoSi",'y',40,100}
    };
   
    数组名就是指针,指向数组的首地址,数组首个元素的地址
    *stu                 :   stu[0]
    *(stu + 1)  : stu[1]
    *(stu + 2)  :    stu[2]
    *(stu + 3)  :    stu[3]
    *(stu + 4)  :    stu[4]
    *(stu + 5)  :    stu[5]
   
    //访问数组中元素的姓名成员变量
    //          (*stu).name   :     stu[0].name
    //(*(stu+1)).name   :     stu[1].name
    //(*(stu+2)).name   :     stu[2].name
    //(*(stu+3)).name   :     stu[3].name
    //(*(stu+4)).name   :     stu[4].name
    //(*(stu+5)).name   :     stu[5].name
   
    printf("%s\n",(*stu).name);1
    printf("%s\n",stu[0].name);
// ->使用指向操作符访问数组中元素
    //stu ->name           :            stu[0].name
    //(stu + 1) ->name  :            stu[1].name
    //(stu + 2) ->name  :            stu[2].name
    //(stu + 3) ->name  :            stu[3].name
    //(stu + 4) ->name  :            stu[4].name
    printf("%s\n",stu->name);
    printf("%s\n",(stu +1) ->name );
   
    //将数组中的第四个元素的名字改为“aJiao”
   
    strcpy((stu +3)->name, "aJiao");
    printf("%s\n",(stu + 3)->name);

   

5、  区别   
   //str 数组中存储的字符串是从常量去拷贝过来的,放到自己的空间里这时修改数组中的数据,没有影响到常量区内容;
//    char str[] = "iPhone";
//    char *p1 = str;
//    p1[1] = 'p';
//    printf("%s\n",p1);
    //*p2指向的是常量区的字符串,常量区的内容是不允许修改的,这时指针p2只拥有访问权,没有修改权
//    char *p2 = "iPhone";
//    p2[1]= 'p';     error  !!!
//    printf("%s\n",p2);

转自:http://blog.csdn.net/qq_31810357

    

时间: 2024-10-25 06:17:55

2015.08.21&nbsp;结构体指针的相关文章

c语言-结构体指针数组指向结构体类型数组的问题

问题描述 结构体指针数组指向结构体类型数组的问题 #include<stdio.h> #include<stdlib.h> struct student { char num; char name[10]; int grade; }; void swap(struct student *p[],int n) { int k,m,i,j; struct student *d; k=0;m=n-1; while(k<m) { j=m-1;m=0; for(i=k;i<=j;

c语言-C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了。

问题描述 C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了. 下面是源码下载:http://pan.baidu.com/s/1dDhplwH 程序是用C语言写的,VS2013编译. 这是其中使用结构体的定义 这是哈夫曼函数的定义 解决方案 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0 , sizeof(--)): 解决方案二: 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0

深入分析C语言中结构体指针的定义与引用详解_C 语言

指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1.p 2,分别指向结构体类型变量.引用形式为:指针变量→成员:[例7-2] 对指向结构体类型变量的正确使用.输入一个结构体类型变量的成员,并输出. 复制代码 代码如下: #include <stdlib.h> /*使用m a l l o c (

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

关于二叉树创建时结构体指针的用法

问题描述 关于二叉树创建时结构体指针的用法 关于二叉树创建时结构体指针的用法 在创建二叉树时我们常常这样用typedef声明一个结点类型和一个二叉树链表: typedef struct BiNode{ //二叉链表定义 char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; 这里用typedef声明了一个结点类型BiTNode,BiTree在这里是一个结构体指针. 在创建一个二叉树时我们常常这样定义一个创建函数: 在这个创建二叉树函

C++结构体指针声明问题。

问题描述 C++结构体指针声明问题. typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;} MSG *PMSG NEAR *NPMSG FAR *LPMSG;static PMSG pmsg ;pmsg = (PMSG)malloc (cLinesMax * sizeof (MSG)) ; for (i = cLinesMax - 1 ; i >

struct-关于C语言结构体指针数组的问题

问题描述 关于C语言结构体指针数组的问题 //结构体struct student{ int iNum; char cName[16]; float fChineseScore; float fMathScore; float fEnglishScore;};typedef struct student STUDENT;//输入void InputTranscript(STUDENT MyClass[] int num){ int i; printf(""请输入学生的成绩信息:n&quo

struct-关于结构体指针与结构体数组

问题描述 关于结构体指针与结构体数组 目前开发遇到一个问题,有一个动态库dll,需要传进去一个结构体数组,函数为 opt_api_init(InfoInitMarket* InitMarketInfo): 这个是结构体 typedef struct tagInfoInitMarket { char commID[COMMODITY_ID + 1]; //合约编码 char classID[CLASS_ID + 1]; //品种代码 char instrumentType; //合约类型:期货:F

c语言-关于C语言结构体指针类型的强制转换(求大神详细解答)

问题描述 关于C语言结构体指针类型的强制转换(求大神详细解答) #include <iostream> #include <algorithm> using namespace std; typedef struct { string dna; int count; }DNA; DNA dna[101]; **int cmp(const void *a,const void *b) { DNA *aa = (DNA *)a; DNA *bb = (DNA *)b; return a