引爆潮流技术 Vue+Django REST framework打造生鲜电商项目

谁说胖子不能爱 提交于 2021-02-04 08:22:04

引爆潮流技术 Vue+Django REST framework打造生鲜电商项目
 

下载地址: 百度云盘
采用当前流行的前后端分离式开发技术,涉及RESTFul API基础知识和Vue项目结构分析,解决了技术开发单一的痛点,拥有超前的技术融合技能,让你在开发的领域比别人技高一筹!
 
学前必看
如果你还对Django框架不了解,强烈推荐从已上线实战课程《强力Django+杀手级xadmin开发在线教育网站》学起

 
技术储备要求
课程重点讲解RESTFul API知识,主要面向后端开发者,为了补充后端同学对前端Vue认知不足,本课程特意简单的讲解了Vue前端项目的结构以及如何调试每个API接口数据
掌握Python语法丨掌握Django框架丨了解Vue 丨MySQL基础
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>/* 包含了运用字符串函数的所需的原型和声明,便于程序执行错误检查 */
#include <math.h>
typedef struct
{  int len;
   int len1;
   char data[0];//不占用内存空间,会在后面连续的分配一块内存空间运用,和指针区别开来
}SS1;

typedef struct
{  int len;
   int len1;
   int data[1];//占用内存空间,会在后面连续的分配一块内存空间运用,和指针区别开来
}SS2;

typedef struct
{  int len;
   int len1;
   char *data;//不占用内存空间,会在后面连续的分配一块内存空间运用,和指针区别开来
}SS3;

typedef struct
{  char len;
   int len1;
   char data;
}W0;

typedef struct
{  char len;
   char len1;
   int data;
}W1;

typedef struct
{  int len;
   char len1;
   short data;
   double data1;
   int len2;
}W2;

//#pragma pack(2)

/*构造体数据类型的对齐规则如下(常见圈套)

1.数据类型本身的对齐值:

关于char型数据,其本身对齐值为1,关于short型为2,关于int,float,double类型,其本身对齐值为4,单位字节。

2.构造体或者类的本身对齐值:其成员中本身对齐值最大的那个值。

3.指定对齐值:#pragma pack (value)时的指定对齐值value。

4.数据成员、构造体和类的有效对齐值:本身对齐值和指定对齐值中小的那个值。

*/

#pragma pack(2)/* 设置2字节对齐 */
typedef struct

   char len1;
   long int data1;
   int len2;
}W3,*b;
#pragma pack() /* 取消指定对齐,恢复缺省对齐(4字节对齐) */

typedef enum
{
 Sunday,
 Monday,
 Tuesday,
 Wednesday,
 Thursday,
 Friday,
 Saturday //尾部不能有逗号
}weekday;


void testarr(int *m);
void teststatic();
void Show(short n);

void testarr(int *m)
{
 printf("arr name m1 = %d\n", sizeof(m));
}

void teststatic()
{
 static int n=10;
 printf("n = %d\n", n);
 n++;
 
}


void Show(short n) {
short i;
printf("%d(",n);
for(i = 0; i < 16; ++i)
printf("%d",(n & (1 << (15 - i))) >> (15 - i));
printf(")B\n");
}


int main(int argc, char **argv)
{
 
 #if 0
 /*1.C言语的输入和输出函数的用法*/
 printf("--------------------------1------------------------------\n");
 int a[10] = {0};
 //a++;
 printf("a=%d\n",a[0]);
 //printf("a=%d\n",a);
 //printf("a=%d\n",&a);
 
 int b = 0;
 scanf("%d",&b);
 printf("%d\n",b);
 

 /*2.应用构造体定义变长数组和指针的比照*/
 printf("--------------------------2------------------------------\n");
 typedef struct
 {  int len;
    int data[0];
 }SS;
 
 SS sa;//构造体相关的部分变量初始化,不初始化后面的数据是一个随机值
 //SS sa={0};
 memset(&sa,0,sizeof(SS));//清空以上构造体中的随机值
 printf("sizeof(SS)=%d\n",sizeof(SS));
 printf("len=%d\n",sa.len);
 printf("data=%d\n",sa.data[0]);
 
 sa.len = 10;
 sa.data[0] = 80;
 sa.data[10] = 80;
 sa.data[20] = 80;
 sa.data[50] = 80;
 sa.data[60] = 80;
 sa.data[65] = 80;
 sa.data[66] = 80;//到了67就不行了
 
 printf("len = %d\n",sa.len);
 printf("data0 = %d\n",sa.data[0]);
 printf("data10 = %d\n",sa.data[10]);
 printf("data20 = %d\n",sa.data[20]);
 printf("data50 = %d\n",sa.data[50]);
 printf("data60 = %d\n",sa.data[60]);
 printf("data60 = %d\n",sa.data[65]);
 printf("data60 = %d\n",sa.data[66]);
 printf("sizeof(SS) = %d\n",sizeof(SS));
 printf("sizeof(sa) = %d\n",sizeof(sa));
 
 //SS1 sa1={0};
 printf("sizeof(SS1)=%d\n",sizeof(SS1));
 printf("sizeof(SS2)=%d\n",sizeof(SS2));
 printf("sizeof(SS3)=%d\n",sizeof(SS3));
 
    /*3.数组名和指针的关系(重难点)*/
 printf("--------------------------3------------------------------\n");
 
    int *m = 0;
 m=a;
 printf("m = %d\n", *m);
 a=m;//a的本质是一个常量,因而不能放在右边
    #endif
 
 /*4.数组名作为函数形参(退化成指针)*/
 printf("--------------------------4------------------------------\n");
 int m1[15] = {0};
 printf("arr name m1 = %d\n", sizeof(m1));
 /* 退化成指针 */
 testarr(m1);
 testarr(&m1[0]);
 
 /*5.sizeof运算符(类型占内存的大小) 和 strlen()函数(计算字符串的长度) 区别*/
 printf("--------------------------5------------------------------\n");
 char str[20]="0123456789abcd";
 int a = strlen(str);//a=10;int b=sizeof(str) str退化为指针
 int b = sizeof(str);//而b=20
 int i = 0;
 printf("a = %d, b = %d\n", a, b);

 
 /* 6. string:是一串以NUL字节结尾的字符汇合*/
 
 //while(NUL != str[i]) NUL需求定义和NULL(指针初值0在stdio.h定义指针初始化避免野指针很重要,部分变量在运用之前也一定要初始化)区别
 printf("--------------------------6------------------------------\n");
 while('\0' != str[i])
 {
  printf("STR the number of %d is %c\n",i,str[i]);
  i++;
 }
 
 /*7.&(位运算构造是逐一位相与的值) &&(逻辑运算,结果是1 or 0只要两个结果 具有短路功用,只需第一个为false后面的就不在执行)*/
 printf("--------------------------7------------------------------\n");
 int x1 = 7 & 8;
 printf("BIT calc number of %d\n",x1);
    int x2 = 7 && 8;
 printf("Logic calc number of %d\n",x2);
 
 /*8.a指针常量(指针指向的地址不变,内容可变) b常量指针(指针指向的内存中的内容不变,地址可变)的区别*/
 printf("--------------------------8------------------------------\n");
 char* const pa = "abc";
 //pa = "bcf";//非法
 //*pa = 'p';非法,字符串常量不能够改动,数组定义的字符串能够修正,容易无视!!!!!!
 printf("pa content is %c\n",*pa);
 
    char const * pb = "abc";
 pb = "bcf";
 //*pb = "efc";//非法,内容不能够变
 printf("pb content is %c\n",*pb);
 
 //惯例
 char const * const pc = "123abc"; //这个pc指向的地址和内容都不变,极端状况
 printf("pc content is %c\n",*pc);//用于输出 指向的特定字符
 printf("pc string content is %s\n" , pc);//用于输出整个字符串(缘由????)
 
 
 /*9.a指针函数(本质是一个函数,返回值是一个指针) b函数指针(函数名是一个指针)的区别*/
 /*
 //类型标识符    *函数名(参数表)
 a.int*   f(x,y);  指针函数

 b.int (*f) (int x); //声明一个函数指针
   f=func; //将func函数的首地址赋给指针f(回调函数的变相运用)
   */
  
   /* 函数指针的应用实例------回调函数(写一个通用的数比拟的回调函数,应用于不同的数据类型)  转换表(简化袖珍式计算器不用switch) */
    printf("--------------------------分割开来------------------------------\n");
 
下载地址:百度云盘

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!