C语言第三次课

来源:互联网 发布:淘宝客链接转换软件 编辑:程序博客网 时间:2024/05/22 08:07

#include<stdio.h>

int main()

{

   int*ptr;   // 声明一个int指针

   int val =1;  // 声明一个int值

   ptr =&val;  // 为指针分配一个int值的引用

   int deref =*ptr;  // 对指针进行取值,打印存储在指针地址中的内容

  printf("deref地址=%ld,值=%d\n",ptr, deref);

}


第2行,我们通过*操作符声明了一个int指针。接着我们声明了一个int变量并赋值为1。然后我们用int变量的地址初始化我们的int指针。接下来对int指针取值,用变量的内存地址初始化int指针。最终,我们打印输出变量值,内容为1。

第6行的&val是一个引用。在val变量声明并初始化内存之后,通过在变量名之前使用地址操作符&我们可以直接引用变量的内存地址。

第8行,我们再一次使用*操作符来对该指针取值,可直接获得指针指向的内存地址中的数据。由于指针声明的类型是int,所以取到的值是指针指向的内存地址存储的int值。



#include<stdio.h>

struct person {

  int age;

  char *name;

};

 

int main()

{

  struct person first;

  struct person *ptr;

  first.age = 21;

  char *fullname = "full name";

  first.name = fullname;

  ptr = &first;

  printf("age=%d, name=%s\n",first.age, ptr->name);

}


第1至6行声明了一个person结构体,一个变量指向了一个person结构体和指向person结构体的指针。第8行为age成员赋了一个int值。第9至10行我们声明了一个char指针并赋值给一个char数组并赋值给结构体name成员。第11行我们把一个person结构体引用赋值给结构体变量。


#include<stdio.h> 

#include<conio.h> 

#include <string.h> 

#include<stdlib.h>

#define N 3 /*N为人数*/

typedef struct node

{

   char name[20];

   struct node *link;

}stud;

stud * creat(int n)/*建立单链表的函数,形参n为人数*/

{

   stud *p,*h,*s; /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/

   int i; /*计数器*/

   if((h=(stud *)malloc(sizeof(stud)))==NULL)/*分配空间并检测*/

   {

     printf("不能分配内存空间!");

     exit(0);

   }

   h->name[0]='\0'; /*把表头结点的数据域置空*/

   h->link=NULL; /*把表头结点的链域置空*/

   p=h; /*p指向表头结点*/

   for(i=0;i<N;i++)

   {

     if((s= (stud *) malloc(sizeof(stud)))==NULL)/*分配新存储空间并检测*/

     {

        printf("不能分配内存空间!");

        exit(0);

     }

     p->link=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/

     printf("请输入第%d个人的姓名",i+1);

     scanf("%s",s->name); /*在当前结点s的数据域中存储姓名*/

     s->link=NULL;

     p=s; //要把s的数据保存到p中,要不下次循环s就又指向一个空的新地址了。

   }

   return(h);

}

int main()

{

   int number; /*保存人数的变量*/

   stud *head; /*head是保存单链表的表头结点地址的指针*/

   number=N;

   head=creat(number); /*把所新建的单链表表头地址赋给head*/

}


体会:

你要去某个人的家里,比如张三。你需要知道他家的地址,门牌号。

变量,就相当于张三

指针,就相当于地址,门牌号

比如int a=3,

内存中分配一块空间来存储3,

3是数据,定义指针*p=&a,

内存也分配一块空间,

并且把3所在空间的地址赋给p,

这样p中就指向3所在空间,*p的值就是3。

a和p是分配空间的名字。

这样有个标签就更加方便明确、同时这也是非常重要的。

比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。
还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,这样大大提高了效率。



0 0
原创粉丝点击