第三节(函数指针、内存分配、字符串)

知识点

#include <iostream>

int add(int a,int b){

    return a+b;
}


int main(int argc, const char * argv[]) {
    int a=5;
    int b=3;
    int (*p)(int a,int b);
    p=add;
    int result=p(a, b);

    printf("%d \n",result);
    
    return 0;
    
}

输出结果:

8

另一种方式

int add1(int *a,int *b)
{
    return (*a)+(*b);
}


int main(int argc, const char * argv[]) {
    int a=5;
    int b=3;
    
    int (*pp)(void *a,void *b);
    
    pp=(int(*)(void *,void*))add1;//这里要进行强转
    
    int result1=pp(&a,&b);
    
    printf("%d\n",result1);
    
    
    return 0;
    
}

输出结果:

8

另一种情况

char add2(char *a,int *b)
{
    return (*a)+(*b);
}

int main(int argc, const char * argv[]) {
    char a='a';
    int b=1;
    
    int (*ppp)(void *a,void *b);
    
    ppp=(int(*)(void *,void*))add2;
    
    char result2=ppp(&a,&b);
    
    printf("%c\n",result2);
    
    
    return 0;
    
}

输出结果:

b

说明int (*ppp)(void *a,void *b);这种定义指针的方法是比较灵活的。

注意

int *p(int a,int b);//这个p是指向一个返回值是一个int *的函数的指针

内存

(程序区、静态存储区、动态存储区)

静态存储区

存储的是全局变量和静态变量,这些变量的空间在程序编译的时候就已经分配好了。

动态存储区

堆区:程序动态分配
栈区:编译器自动分配,由编译器自动生成和释放

程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

关于static和const
const作用: “只读(readonly)”
static:静态变量
关于static的描述引用自这儿链接


1.作用于变量:

   用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期)。用static声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元。这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变)。

   用static声明外部变量-------外部变量指在所有代码块{}之外定义的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内存单元。同时其作用域很广,整个文件都有效甚至别的文件也能引用它。为了限制某些外部变量的作用域,使其只在本文件中有效,而不能被其他文件引用,可以用static关键字对其作出声明。

  总结:用static声明局部变量,使其变为静态存储方式(静态数据区),作用域不变;用static声明外部变量,其本身就是静态变量,这只会改变其连接方式,使其只在本文件内部有效,而其他文件不可连接或引用该变量。

2.作用于函数:

  使用static用于函数定义时,对函数的连接方式产生影响,使得函数只在本文件内部有效,对其他文件是不可见的。这样的函数又叫作静态函数。使用静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种保护机制。

  如果想要其他文件可以引用本地函数,则要在函数定义时使用关键字extern,表示该函数是外部函数,可供其他文件调用。另外在要引用别的文件中定义的外部函数的文件中,使用extern声明要用的外部函数即可。


malloc函数

1、malloc函数的声明:

void    *malloc(size_t __size) __result_use_check;

申请一块大小为__size的连续的内存空间,如果申请不成功会返回NULL;
2、calloc函数的生命:

void    *calloc(size_t __count, size_t __size) __result_use_check;

申请__count块大小为__size的连续的内存空间,块与块之间可以不用连续,但是块内必须是连续的,如果申请不成功,则返回NULL;
动态申请的内存使用完毕后必须进行释放,而且只能释放一次:

    int *p= (int *)malloc(2*sizeof(int));
    free(p);
    p=NULL;//释放内存之后最好进行置空操作

3.realloc(不常用)

void    *realloc(void *__ptr, size_t __size) __result_use_check;

字符串

    //字符串
    char c[]={'c','h','i','n','a','\0'};
    printf("%s \n",c);

从c指向的地址开始输出,直到遇到'\0'结束。
输出结果:

china

另一种定义方式:

    //字符串
    char c[]="china";
    printf("%s \n",c);

注意事项

    char p[10]={'c','h','i','n','a'};
    printf("%s \n",p);
    p[0]='s';
    printf("%s \n",p);

输出结果:

china 
shina 
    char p1[]={'c','h','i','n','a','\0'};
    printf("%s \n",p1);
    
    p1[0]='s';
    printf("%s \n",p1);

输出结果:

china 
shina 
    char *p2="china";
    printf("%s \n",p2);
    p2[0]='s';//然而这种情况却是错误的,不能完成赋值操作,因为“china”存在于常量区
    printf("%s \n",p2);

第三种情况与前两种有本质区别,前两种都是分配一块区域,这块区域的内容是china,地址是p(或者p1),第三种情况是在常量区中有一块区域,这块区域的内容是china,然后让p2指向了这块区域。

所以说我们可以把china从常量区拷贝一份再做修改

    char *ppp=(char *)malloc(10*sizeof(char));
    strcpy(ppp, "china");
    printf("%s\n",ppp);
    ppp[0]='s';
    printf("%s\n",ppp);

输出结果:

china
shina

关于c语言中的一些字符串处理函数

函数名: stpcpy 
功  能: 拷贝一个字符串到另一个 
用  法: char *stpcpy(char *destin, char *source); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char string[10]; 
   char *str1 = "abcdefghi"; 
   stpcpy(string, str1); 
   printf("%sn", string); 
   return 0; 
} 
  
  
  
函数名: strcat 
功  能: 字符串拼接函数 
用  法: char *strcat(char *destin, char *source); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char destination[25]; 
   char *blank = " ", *c = "C++", *Borland = "Borland"; 
   strcpy(destination, Borland); 
   strcat(destination, blank); 
   strcat(destination, c); 
   printf("%sn", destination); 
   return 0; 
} 
  
  
  
函数名: strchr 
功  能: 在一个串中查找给定字符的第一个匹配之处 
用  法: char *strchr(char *str, char c); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
 { 
    char string[15]; 
    char *ptr, c = 'r'; 
    strcpy(string, "This is a string"); 
    ptr = strchr(string, c); 
    if (ptr) 
       printf("The character %c is at position: %dn", c, ptr-string); 
    else 
       printf("The character was not foundn"); 
    return 0; 
 } 
  
  
  
函数名: strcmp 
功  能: 串比较 
用  法: int strcmp(char *str1, char *str2); 
看Asic码,str1>str2,返回值 > 0;两串相等,返回0
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
 { 
    char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc"; 
    int ptr; 
    ptr = strcmp(buf2, buf1); 
    if (ptr > 0) 
       printf("buffer 2 is greater than buffer 1n"); 
    else 
       printf("buffer 2 is less than buffer 1n"); 
    ptr = strcmp(buf2, buf3); 
    if (ptr > 0) 
       printf("buffer 2 is greater than buffer 3n"); 
    else 
       printf("buffer 2 is less than buffer 3n"); 
    return 0; 
 } 
  
  
  
函数名: strncmpi 
功  能: 将一个串中的一部分与另一个串比较, 不管大小写 
用  法: int strncmpi(char *str1, char *str2, unsigned maxlen); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *buf1 = "BBB", *buf2 = "bbb"; 
   int ptr; 
   ptr = strcmpi(buf2, buf1); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 1n"); 
   if (ptr < 0) 
      printf("buffer 2 is less than buffer 1n"); 
   if (ptr == 0) 
      printf("buffer 2 equals buffer 1n"); 
   return 0; 
} 
  
  
  
函数名: strcpy 
功  能: 串拷贝 
用  法: char *strcpy(char *str1, char *str2); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
 { 
    char string[10]; 
    char *str1 = "abcdefghi"; 
    strcpy(string, str1); 
    printf("%sn", string); 
    return 0; 
 } 
  
  
  
函数名: strcspn 
功  能: 在串中查找第一个给定字符集内容的段 
用  法: int strcspn(char *str1, char *str2); 
程序例: 
#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
int main(void) 
 { 
    char *string1 = "1234567890"; 
    char *string2 = "747DC8"; 
    int length; 
    length = strcspn(string1, string2); 
    printf("Character where strings intersect is at position %dn", length); 
    return 0; 
 } 
  
  
  
函数名: strdup 
功  能: 将串拷贝到新建的位置处 
用  法: char *strdup(char *str); 
程序例: 
#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
int main(void) 
 { 
    char *dup_str, *string = "abcde"; 
    dup_str = strdup(string); 
    printf("%sn", dup_str); 
    free(dup_str); 
    return 0; 
 } 
  
  
  
函数名: stricmp 
功  能: 以大小写不敏感方式比较两个串 
用  法: int stricmp(char *str1, char *str2); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *buf1 = "BBB", *buf2 = "bbb"; 
   int ptr; 
   ptr = stricmp(buf2, buf1); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 1n"); 
   if (ptr < 0) 
      printf("buffer 2 is less than buffer 1n"); 
   if (ptr == 0) 
      printf("buffer 2 equals buffer 1n"); 
   return 0; 
} 
  
  
函数名: strerror 
功  能: 返回指向错误信息字符串的指针 
用  法: char *strerror(int errnum); 
程序例: 
#include <stdio.h> 
#include <errno.h> 
int main(void) 
{ 
   char *buffer; 
   buffer = strerror(errno); 
   printf("Error: %sn", buffer); 
   return 0; 
} 
  
  
  
函数名: strcmpi 
功  能: 将一个串与另一个比较, 不管大小写 
用  法: int strcmpi(char *str1, char *str2); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *buf1 = "BBB", *buf2 = "bbb"; 
   int ptr; 
   ptr = strcmpi(buf2, buf1); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 1n"); 
   if (ptr < 0) 
      printf("buffer 2 is less than buffer 1n"); 
   if (ptr == 0) 
      printf("buffer 2 equals buffer 1n"); 
   return 0; 
} 
  
  
  
函数名: strncmp 
功  能: 串比较 
用  法: int strncmp(char *str1, char *str2, int maxlen); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int  main(void) 
{ 
   char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc"; 
   int ptr; 
   ptr = strncmp(buf2,buf1,3); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 1n"); 
   else 
      printf("buffer 2 is less than buffer 1n"); 
   ptr = strncmp(buf2,buf3,3); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 3n"); 
   else 
      printf("buffer 2 is less than buffer 3n"); 
   return(0); 
} 
  
  
函数名: strncmpi 
功  能: 把串中的一部分与另一串中的一部分比较, 不管大小写 
用  法: int strncmpi(char *str1, char *str2); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *buf1 = "BBBccc", *buf2 = "bbbccc"; 
   int ptr; 
   ptr = strncmpi(buf2,buf1,3); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 1n"); 
   if (ptr < 0) 
      printf("buffer 2 is less than buffer 1n"); 
   if (ptr == 0) 
      printf("buffer 2 equals buffer 1n"); 
   return 0; 
} 
  
  
函数名: strncpy 
功  能: 串拷贝 
用  法: char *strncpy(char *destin, char *source, int maxlen); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char string[10]; 
   char *str1 = "abcdefghi"; 
   strncpy(string, str1, 3); 
   string[3] = ''; 
   printf("%sn", string); 
   return 0; 
} 
  
  
函数名: strnicmp 
功  能: 不注重大小写地比较两个串 
用  法: int strnicmp(char *str1, char *str2, unsigned maxlen); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *buf1 = "BBBccc", *buf2 = "bbbccc"; 
   int ptr; 
   ptr = strnicmp(buf2, buf1, 3); 
   if (ptr > 0) 
      printf("buffer 2 is greater than buffer 1n"); 
   if (ptr < 0) 
      printf("buffer 2 is less than buffer 1n"); 
   if (ptr == 0) 
      printf("buffer 2 equals buffer 1n"); 
   return 0; 
} 
  
  
  
函数名: strnset 
功  能: 将一个串中的所有字符都设为指定字符 
用  法: char *strnset(char *str, char ch, unsigned n); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char *string = "abcdefghijklmnopqrstuvwxyz"; 
   char letter = 'x'; 
   printf("string before strnset: %sn", string); 
   strnset(string, letter, 13); 
   printf("string after  strnset: %sn", string); 
   return 0; 
} 
  
  
函数名: strpbrk 
功  能: 在串中查找给定字符集中的字符 
用  法: char *strpbrk(char *str1, char *str2); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char *string1 = "abcdefghijklmnopqrstuvwxyz"; 
   char *string2 = "onm"; 
   char *ptr; 
   ptr = strpbrk(string1, string2); 
   if (ptr) 
      printf("strpbrk found first character: %cn", *ptr); 
   else 
      printf("strpbrk didn't find character in setn"); 
   return 0; 
} 
  
  
  
函数名: strrchr 
功  能: 在串中查找指定字符的最后一个出现 
用  法: char *strrchr(char *str, char c); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char string[15]; 
   char *ptr, c = 'r'; 
   strcpy(string, "This is a string"); 
   ptr = strrchr(string, c); 
   if (ptr) 
      printf("The character %c is at position: %dn", c, ptr-string); 
   else 
      printf("The character was not foundn"); 
   return 0; 
} 
  
  
  
函数名: strrev 
功  能: 串倒转 
用  法: char *strrev(char *str); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *forward = "string"; 
   printf("Before strrev(): %sn", forward); 
   strrev(forward); 
   printf("After strrev():  %sn", forward); 
   return 0; 
} 
  
函数名: strset 
功  能: 将一个串中的所有字符都设为指定字符 
用  法: char *strset(char *str, char c); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char string[10] = "123456789"; 
   char symbol = 'c'; 
   printf("Before strset(): %sn", string); 
   strset(string, symbol); 
   printf("After strset():  %sn", string); 
   return 0; 
} 
  
  
  
函数名: strspn 
功  能: 在串中查找指定字符集的子集的第一次出现 
用  法: int strspn(char *str1, char *str2); 
程序例: 
#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
int main(void) 
{ 
   char *string1 = "1234567890"; 
   char *string2 = "123DC8"; 
   int length; 
   length = strspn(string1, string2); 
   printf("Character where strings differ is at position %dn", length); 
   return 0; 
} 
  
  
函数名: strstr 
功  能: 在串中查找指定字符串的第一次出现 
用  法: char *strstr(char *str1, char *str2); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char *str1 = "Borland International", *str2 = "nation", *ptr; 
   ptr = strstr(str1, str2); 
   printf("The substring is: %sn", ptr); 
   return 0; 
} 
  
  
函数名: strtod 
功  能: 将字符串转换为double型值 
用  法: double strtod(char *str, char **endptr); 
程序例: 
#include <stdio.h> 
#include <stdlib.h> 
int main(void) 
{ 
   char input[80], *endptr; 
   double value; 
   printf("Enter a floating point number:"); 
   gets(input); 
   value = strtod(input, &endptr); 
   printf("The string is %s the number is %lfn", input, value); 
   return 0; 
} 
  
  
  
函数名: strtok 
功  能: 查找由在第二个串中指定的分界符分隔开的单词 
用  法: char *strtok(char *str1, char *str2); 
程序例: 
#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
   char input[16] = "abc,d"; 
   char *p; 
   /* strtok places a NULL terminator 
   in front of the token, if found */ 
   p = strtok(input, ","); 
   if (p)   printf("%sn", p); 
   /* A second call to strtok using a NULL 
   as the first parameter returns a pointer 
   to the character following the token  */ 
   p = strtok(NULL, ","); 
   if (p)   printf("%sn", p); 
   return 0; 
} 
  
  
  
函数名: strtol 
功  能: 将串转换为长整数 
用  法: long strtol(char *str, char **endptr, int base); 
程序例: 
#include <stdlib.h> 
#include <stdio.h> 
int main(void) 
{ 
   char *string = "87654321", *endptr; 
   long lnumber; 
   /* strtol converts string to long integer  */ 
   lnumber = strtol(string, &endptr, 10); 
   printf("string = %s  long = %ldn", string, lnumber); 
   return 0; 
} 
  
函数名: strupr 
功  能: 将串中的小写字母转换为大写字母 
用  法: char *strupr(char *str); 
程序例: 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
   char *string = "abcdefghijklmnopqrstuvwxyz", *ptr; 
   /* converts string to upper case characters */ 
   ptr = strupr(string); 
   printf("%sn", ptr); 
   return 0; 
} 
  
  
  
函数名: swab 
功  能: 交换字节 
用  法: void swab (char *from, char *to, int nbytes); 
程序例: 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
char source[15] = "rFna koBlrna d"; 
char target[15]; 
int main(void) 
{ 
   swab(source, target, strlen(source)); 
   printf("This is target: %sn", target); 
   return 0; 
}



PS:isalpha()是字符函数,不是字符串函数,

isalpha 
  
 

  原型:extern int isalpha(int c);
  
  用法:#include <ctype.h>
  
  功能:判断字符c是否为英文字母
  
  说明:当c为英文字母a-z或A-Z时,返回非零值,否则返回零。
  
  举例:

      // isalpha.c
      
      #include <syslib.h>
      #include <ctype.h>
      #include <stdio.h>

      main()
      {
        int c;
        
        clrscr();        // clear screen
        printf("Press a key");
        for(;;)
        {
          c=getchar();
          clrscr();
          printf("%c: %s letter",c,isalpha(c)?"is":"not");
        }
        return 0; // just to avoid warnings by compiler
      }


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 几种语言的特性 汇编程序:将汇编语言源程序翻译成目标程序编译程序:将高级语言源程序翻译成目标程序解释程序:将高级语...
    囊萤映雪的萤阅读 2,867评论 1 5
  • 家里的活全落在母亲一人的肩上,除了烧饭、做菜、洗碗、洗衣!喂猪、养鹅一一切饲料。夏播,秋收还要到队里晒谷,自家晒稻...
    清风流水_5e84阅读 377评论 4 13
  • hi 大家好我是暴躁老哥 今天给大家分享干货,如何拍摄带货视频,把货卖出去呢? 要实现拍视频带货,直播带货,人气是...
    锦鲤_bdd4阅读 1,235评论 0 4
  • 天光云影, 寂寞春河冷。 疑是芦丛情泪耿, 不忍醉中唤醒。 春深一苇争青, 群芳鶴立亭亭。 但恨无人悦赏, 奈何说...
    青鱼吹浪阅读 453评论 0 6
  • 现在,今天晚上,他不是以一个看了几本哲学书后颇有想法的年轻人的身份 来写作此篇,今晚他更像是一个小男孩,需要情感上...
    sai118cool阅读 99评论 0 0