结构体与指针_sizeof_static_extern_函数指针数组_函数指针_回调函数

一、结构体与指针

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#define up_to_down(uuu) (downdemo_t *)(uuu->beg)
#define __plc__
typedef struct updemo_s{
  uint8_t *head;
  uint8_t *beg;
  uint8_t *end;
}updemo_t;
typedef struct downdemo_s{
  uint8_t value;
  uint16_t type;
  uint8_t mmentry[0];
}downdemo_t;
typedef struct mmsg_s{
  uint8_t hh;
  uint8_t hhh;
}mmsg_t;
__plc__ int main(int argc, char* argv[])
{
  updemo_t *uu;
  downdemo_t *dd;
  mmsg_t *mm;
  uu=(updemo_t *)malloc(sizeof(updemo_t));
  uu->beg=malloc(sizeof(downdemo_t));
  dd=up_to_down(uu);
  dd->value=4;
  dd->type=8;
  mm=(mmsg_t *)dd->mmentry;
  mm->hh=10;
  mm->hhh=12;
  printf("dd->value: %d\n",dd->value);
  printf("dd->type: %d\n",dd->type);
  printf("mm->hh: %d\n",mm->hh);
  printf("mm->hhh: %d\n",mm->hhh);
  return 0;  
}

二、sizeof

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char* argv[])
{
  uint8_t a[1];
  uint8_t b[0];
  uint8_t *c;
  printf("a[1]: %ld a: %\n",sizeof(a));
  printf("b[0]: %ld\n",sizeof(b));
  printf("*c: %ld\n",sizeof(c));
  return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
int main(int argc,char* argv[])
{
  uint8_t a[1];
  uint8_t b[0];
  uint8_t *c;
  int *d;
  char e;
  int f;
  char g[]={"1234\0"};
  printf("a[0]: %d sizeof(a): %ld\n",a[0],sizeof(a));
  printf("b[0]: %d sizeof(b): %ld\n",b[0],sizeof(b));
  printf("*c: %d sizeof(c): %ld\n",*c,sizeof(c));
  printf("sizeof(d): %ld\n",sizeof(d));
  printf("sizeof(e): %ld\n",sizeof(e));
  printf("sizeof(f): %ld\n",sizeof(f));
  printf("sizeof(g): %ld\n",sizeof(g));
  return 0;
}

 

三、static

#include <stdio.h>
void func1(void);
static int count=10;
int main()
{
  while(count--){
    func1();
  }
  return 0;
}
void func1(void)
{
  static int thingy=5;
  thingy++;
  printf("thingy is %d ,count is %d\n",thingy,count);
}

四、extern

first.c


#include <stdio.h>

int count;
extern void write_extern();

int main()
{
  count=5;
  write_extern();
}

support.c

#include <stdio.h>

extern int count;

void write_extern(void)
{
  printf("count is %d\n",count);
}

五、函数指针数组

#include <stdio.h>
#include <stdlib.h>

int a()
{
  printf("\n1\n");
  return 1;
}
int b()
{
  printf("\n2\n");
  return 2;
}
int c()
{
  return 3;
}
int d()
{
  return 4;
}
int (*oper_func[])(void)={a,b,c,d};
int main()
{
  for(int i=0;i<4;i++){
    printf("i:%d  oper_func[i]:%d  *oper_func[i]:%d  oper_func[i]():%d\n",i,oper_func[i],*oper_func[i],oper_func[i]());
  }
}

六、函数指针

#include <stdio.h>

int (*p1)(int, int);
int max(int x, int y)
{
  return x > y ? x : y;
}

int main()
{
  int (*p2)(int, int)= max;
  p1=max;
  int a,b,c,d;
  printf("请输入三个数:");
  scanf("%d %d %d",&a, &b, &c);
  d=p1(p1(a,b),c);
  printf("p1最大的数d是:%d p1:%d\n",d,p1);
  printf("p2(p2(a,b),c):%d p2:%d\n",p2(p2(a,b),c),p2);
  return 0;
}

七、回调函数

#include <stdio.h>
#include <stdlib.h>

void populate_array(int *array, size_t arraySize, int(*getNextValue)(void))
{
  for(size_t i=0; i<arraySize;i++)
  {
    array[i]= getNextValue();
  }
}

int getNextRandomValue(void)
{
  return rand();
}

int main()
{
  int myarray[10];
  populate_array(myarray,10,getNextRandomValue);
  for(int i=0; i<10; i++)
  {
    printf("%d\n",myarray[i]);
  }
  return 0;
}

八、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值