c语言基础学完进阶,c语言进阶教程

  c语言基础学完进阶,c语言进阶教程

  文章第一天,判断数组长度*a和a[5]数据类型。数据类型和内存有关系吗?Typedef:别名变量。空型变量存储器四个区域1。堆栈区域2。堆栈区域3。全球第4区。代码区域将堆栈区域中的数据声明为全局数据,不会被释放。

  第一天

  确定数组长度# includesdio.h

  int main()

  {

  int a[]={0,4,6,7,9,10,2,4,5 };

  int n=sizeof(a)/sizeof(a[0]);

  printf(len of array: %d\n ,n);//n=9

  }

  *a和a[5]#包括stdio.h

  #包含stdlib.h

  void print_array(int *a,int n)

  {

  int m=sizeof(a)/sizeof(a[0]);

  printf(len of a at func: %d\n ,m);

  for(int I=0;I n;我)

  {

  printf(%d ,a[I]);

  }

  printf( \ n );

  }

  void sort_array(int *a,int n)

  {

  内部温度;

  for(int I=0;I n;我)

  {

  for(int j=I 1;j n;j)

  {

  如果(阿[j]阿[i])

  temp=a[j],a[j]=a[i],a[I]=temp;

  }

  }

  printf( \ n );

  }

  int main()

  {

  int a[]={0,4,6,7,9,10,2,4,5},temp

  int n=sizeof(a)/sizeof(a[0]);

  printf(len of array: %d\n ,n);//9

  printf(原始数组:\ n );

  print_array(a,n);

  sort_array(a,n);

  printf(排序数组:\ n );

  print_array(a,n);

  返回0;

  }

  /*

  阵列透镜:9

  原始数组:

  函数为2的透镜

  0 4 6 7 9 10 2 4 5

  排序数组:

  函数为2的透镜

  0 2 4 4 5 6 7 9 10

  */int * temp;//temp是int指针,*temp是指针所指空间的大小。

  int a[]={0,4,6,7,9,10,2,4,5},*temp,I;//temp是int指针,*temp是指针所指空间的大小。

  int n=sizeof(a)/sizeof(a[0]);

  printf( % d % d % d % d % d % d \ n ,n,sizeof(temp),sizeof(*temp),sizeof(temp[0]),sizeof(I));//9 8 4 4 4

  char * chr

  printf(%d %d\n ,sizeof(chr),sizeof(* chr));/8 1

  //指针类型长度,32位:4

  //64位:8

  数据类型

  数据类型和内存有关系吗?这很重要。为了更好地管理数据,数据类型是固定内存大小的别名。编译器不会为数据类型分配空间。只有根据类型创建变量,编译器才会分配空间。Sizeof是运算符,不是函数。

  int main()

  {

  int a;

  int b[10];

  //数据类型的本质:固定内存块大小别名

  //能通过sizeof测试的,不是函数,是运算符

  printf(sizeof(a)=%d,sizeof(b)=%d\n ,sizeof(a),sizeof(b));//sizeof(a)=4,sizeof(b)=40

  //打印地址

  //b,b:表示的数据类型不同。

  //b,数组第一个元素的地址,一个元素4个字节,1,4

  //b,整个数组的第一个地址,一个数组4 * 10,1,40

  printf(b:%d,b:%d\n ,b,b);//b:6421984,b:6421984

  printf(b 1:%d,b 1:%d\n ,b 1,B1);//b 1:6421988,b 1:6422024

  }

  Typedef:别名变量。typedef无符号int u32

  //typedef通常与结构一起使用。

  结构MyStruct

  {

  int a;

  int b;

  };

  typedef结构MyStruct2

  {

  int a;

  int b;

  } TMP

  int main()

  {

  struct MyStruct m1

  //my struct m2;//错误

  TMP m3

  返回0;

  }

  空隙类型

  Void没有类型。

  参数为空。定义函数时,可以用void修改int func(void)。在C语言中,这种情况下必须写void,而C可以不写。该函数没有返回值。虚空乐趣();不能定义void类型的普通变量,void a;//err无法判断分配了多少内存。可以定义void类型的指针,void * p;//ok对于指针,分配的内存大小是固定的。

  void * p=NULL

  printf(%d %d\n ,sizeof(*p),sizeof(p));//1 8

  一个内存空间的编号,程序通过变量来申请和命名内存空间。

  变量:名称、大小、范围、生命周期。

  四个内存栈:系统分配空间,系统自动回收,函数中定义的变量,函数参数,函数结束,其内部变量的生命周期结束。堆:程序员动态分配空间,手动释放。全局区:全局变量和静态变量,分为初始化区和未初始化区,文本常量区和字符常量区。整个程序运行后,系统会自动回收。代码区内存四区模型图

  1.在堆区手动回收。

  操作系统恢复(程序结束)。

  为了灵活起见,其他函数也可以使用变量。

  地址自下而上递增。

  数组buf,地址总是递增的,

  2.栈区系统分配空间,离开作用域后自动回收。

  为了效率。

  地址从上到下递减。

  3.全局区域3.1未初始化。

  3.2初始化

  3.3文本恒定区

  4.代码区操作系统,编译器管理。

  全球区域

  #包含stdio.h

  #包含stdlib.h

  char *get_str1()

  {

  char * p= abcdef//文本常量区域

  返回p;

  }

  char *get_str2()

  {

  char * q= abcdef//文本常量区域

  返回q;

  }

  int main()

  {

  //堆栈区域

  char * p=NULL//堆栈区域

  char * q=NULL

  p=get _ str 1();

  printf(p=%s,p=%d\n ,p,p);

  q=get _ str 2();

  printf(q=%s,q=%d\n ,q,q);

  /*

  p=abcdef,p=4206628

  q=abcdef,q=4206628

  */

  返回0;

  }

  堆栈区

  #包含stdio.h

  #包含stdlib.h

  #包含字符串. h

  char *get_str()

  {

  char str[]= asdiajsdi ;//堆栈区域

  返回字符串;

  }

  int main()

  {

  char buf[128]={ 0 };

  //strcpy(buf,get _ str());//成功的情况可能是先复制语句,再释放堆栈空间。

  //printf(buf=%s\n ,buf);//没有结果,不确定

  char * p=NULL

  p=get _ str();

  printf(p=%s\n ,p);//p=(null)

  返回0;

  }

  char str[]=" asdiajsdi ";//堆栈区,将文字常量区的字符串复制到堆栈区。

  char * q=" abcdef//q指向文字常量区域。

  char * buf=" asdas

  buf[2]=" 2 ";//错误,文字常量区,内存不能修改。

  char * buf[]=" dads ";//好的,堆栈区域

  buf[2]=" 3 ";//修改堆栈区域的内容

  #包含stdio.h

  #包含stdlib.h

  #包含字符串. h

  char *get_str()

  {

  char str[]= asdiajsdi ;//堆栈区域;文字常量区的字符串将被复制到堆栈区。

  返回字符串;

  }

  char *get_str2()

  {

  char * tmp=(char *)malloc(100);//堆区域

  if (tmp==NULL)

  {

  返回NULL

  }

  strcpy(tmp, dadsdfsdg );

  返回tmp

  }

  int main()

  {

  char buf[128]={ 0 };

  //strcpy(buf,get _ str());

  //printf(buf=%s\n ,buf);//没有结果,不确定

  char * p=NULL

  p=get _ str();

  printf(p=%s\n ,p);//p=(null)

  p=get _ str 2();

  如果(p!=空)

  {

  printf(p=%s\n ,p);//p=dadsfdsfsdg

  免费(p);

  p=NULL

  }

  返回0;

  }

  将堆栈区的数据声明为全局,不会释放int *func()

  {

  int a;

  返回a;//毫无意义。地址A的空间会被回收,即使返回地址也无法使用。

  }//地址A不能使用,它存在于堆栈区,函数运行后会释放int *getA()。

  {

  静态int a=10//全局区域,内部

  返回a;//您可以传递地址以使用。

  }

  ,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: