电商专业学习嵌入式软件开发第二十二天

  • 预科第十一天

今天讲的东西不算多,只有字符串和指针与数组的关系两点,但是这两点任何一点拿出来都足够让我琢磨好久了。尤其是指针与数组结合真是伤脑筋,绕不出来。不知道通过练习能不能对这部分内容有所了解。

26.字符串

内存分配
栈区:存储局部变量的数据
堆区:由程序员malloc出来的空间
全局区(静态区):全局变量,静态变量
文字常量区:常量字符串(内容不可更改)
代码区:二进制代码

所有的字符串都可以看成字符数组
字符串:由多个字符构成的集合

 字符串的定义
    char ch[5];
1.字符串的初始化
    char string[10] = {"hello"};
2.
    char string2[10] = "hello";
3.
    char string3[] = "hello";
4.
    char *p = "hello";
    printf("p = %p\n",p);
    p = "world";
    printf("p = %p\n",p);

printf是打印第一个字符串,\0在字符串当中是一个不显示字符,加上\0代表一个字符串结束

    char *q = "yy";
    char *q1 = "yy";
    printf("q = %p\n",q);
    printf("q1 = %p\n",q1);

计算字符串的实际长度strlen,不包含\0这个字符,要包含头文件#include<string.h>

    char string[] = "hello world";
    long int length = strlen(string);
    printf("%ld\n",length);

拷贝

    char string[10] = "hello";
    char string1[6];

目标字符串的大小>=strlen(源字符串)+1,否则会出现段错误或程序崩掉

    strcpy(string1,string);
    printf("string1 = %s\n",string1); //打印字符串时用%s

    char string1[11] = "hello";
    char string2[10] = "world";
    strcat(string1,string2);
    printf("string1 = %s\nstring2 = %s\n",string1,string2);

如果编译器比较低级:string1>string=1,string1<string=-1,string1=string=0;
如果编译器比较高级:string1<string2=从第一个不同的字母相减,string1>string2=从第一个不同的字母相减,string1=string2=0;

    char string1[10] = "hello";
    char string2[10] = "hgllo";
    //strcompare
    int res = strcmp(string1,string2);
    printf("res = %d\n",res);

    char string1[10] = "ha";
    char string2[10] = "h";
    //strcompare
    int res = strcmp(string1,string2);
    printf("res = %d\n",res); //res=97

//拷贝前几个字符串
    char dst[10] = {0};
    char source[20] = "nihaoworld";
    strncpy(dst,source,5);
    printf("dst = %s \n",dst);

    //strncat剪切前几个字符
    char dst[20] = "hello";
    char source[10] = "nihaoworld";
    strncat(dst,source,5);
    printf("dst = %s\n",dst); 

    //strncmp
    char string1[20] = "hellonihao";
    char string2[20] = "helloworld";
    int res = strncmp(string1,string2,5);
    printf("res = %d\n",res);

16进制:09f
a b c d e f
a=10 b=11 ... f=15
指针和数组的关系

数组在内存中是一个连续存储的集合
int array[5] = {1,2,3,4,5};
&数组名[下标]
  int i;
  for(i = 0;i < 5;i++)
  {
    printf("arr[%d]的地址 = %p\n",i,&array[i]);
  }

  int i;
  for(i = 0;i < 5;i++)
  {
    printf("arr[%d]的地址 = %d\n",i,*(array+i));
  }
  printf("arr = %p\n",array + 1);

  1>一维数组的数组名就是首元素地址;
  2>如果是某个地址变量+i:实际上是+sizeof(数组元素的类型)*i;
  3>访问第i个元素的地址:
      &array[i] ==========> array+i;
  4>访问第i个元素的值:
      array[i] =========> *(array+i);

  如果有下列等式成立:int *p = &array[0];//int *p = array;那么访问第i个变量的地址:p+i===>&p[i];
  访问第i个变量的值:*(p+i)===>p[i];
  array能做的事,p都能做,array不能做的事,p也能做,比如说:array++是错的,p++是可以的

  int *p=&array[0];//int *p=array;
  for(i = 0;i < 5;i++)
  {
    printf("arr[%d]=%p\n",i,&p[i]);//p+i
  }

  二维数组:由多个一维数组构成的数组
  数据类型 数组名[row][colum];
  二维数组的定义:
    int array[3][4];
  1.初始化
    int array1[2][3] = {{1,2,3},{4,5,6}};
  2.用0补全
    int array2[2][3] = {{1,2},{4,5}};
  3.
    int array3[2][3] = {1,2,3,4,5,6};
  4.行号可以省略,列号不能省
     int array4[][3] = {1,2,3,4,5,6};
  5.
      int array5['a'][3] = {0};
  6.
      int array6[2][3] = {{[1] = 1,[2] = 5},{[1] = 4}};

  二维数组元素:数组名[行下标][列下标]
  int array[2][3] = {1,2,3,4,5,6};
  printf("array[1][2] = %d\n",array[1][2]);

  int row,colum;
  二维数组的遍历
  for(row = 0;row < 2;row++)
  {
      for(colum = 0;colum < 3;colum++)
    {
        printf("array[%d][%d] = %d ",row,colum,array[row][colum]);
    }
  }

打印空心菱形
              *
            *   *
          *       *
        *           *
          *       *
            *   *
              *
  int array[7][13] = {
    {[6] = 1},
    {[4] = 1,[8] = 1},
    {[2] = 1,[10] = 1},
    {[0] = 1,[12] = 1},
    {[2] = 1,[10] = 1},
    {[4] = 1,[8] = 1},
    {[6] = 1}
      };
   int i,j;
   for(i = 0;i < 7;i++)
    {
    for(j = 0;j < 13;j++)
    {
        if(array[i][j] == 1)
        {
            printf("*");
        }
        else
        {
            printf(" ");
        }           
    }
    printf("\n");
  }

  自定义一个2*3列的整型数组,求其最大值
  int array[2][3] = {{1,3,5},{2,4,6}};
  int max = array[0][0];
  int i,j;
  for(i = 0;i < 2;i++)
  {
    for(j = 0;j < 3;j++)
    {
        max = max < array[i][j] ? array[i][j] : max;
    }
  }
  printf("max = %d\n",max);

  int arr[2][3];
  二维数组内存也是连续的
  int i,j;
  for(i = 0;i < 2;i++)
  {
    for(j = 0;j < 3;j++)
    {
        printf("arr[%d][%d]的地址 = %p\n",i,j,&arr[i][j]);
    }
}

i,j地址:
  a[i]+j ==> &a[i][j] ==> *(a+i)+j;
 i,j值
  *(a[i]+j) ==> a[i][j] ==> *(*(a+i)+j);
 i行0列元素地址:
  &arr[i][0] ==> *(arr+i) ==> a[i] 
    ==> a+i (i行一维数组的地址)

    int a;
    int *q=&a;   
    int arr[2][3]={1,2,3,4,5};    
    //先算小括号,代表p这个变量是一个指针变量,再算[],代表将来这个指针指向的是一个大小为3的整型一维数组整体;    
    int (*p)[3];//数组指针
    p=arr;
    /*
     二维数组和指针的关系:
     只要有int (*p)[3]=arr;等式成立,arr能用的情况,p都能用,arr不能用的情况,p也能用
     */
    int i,j;
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("arr[%d][%d]=%d\n",i,j,p[i][j]);
        }
    }

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

推荐阅读更多精彩内容