精华内容
下载资源
问答
  • 二维字符串数组初始化
    2021-05-19 08:18:39

    Eric Leschin..

    9

    如何创建包含字符指针的数组大小5:

    char *array_of_pointers[ 5 ]; //array size 5 containing pointers to char

    char m = 'm'; //character value holding the value 'm'

    array_of_pointers[0] = &m; //assign m ptr into the array position 0.

    printf("%c", *array_of_pointers[0]); //get the value of the pointer to m

    如何创建指向字符数组的指针:

    char (*pointer_to_array)[ 5 ]; //A pointer to an array containing 5 chars

    char m = 'm'; //character value holding the value 'm'

    *pointer_to_array[0] = m; //dereference array and put m in position 0

    printf("%c", (*pointer_to_array)[0]); //dereference array and get position 0

    如何创建包含字符指针的2D数组:

    char *array_of_pointers[5][2];

    //An array size 5 containing arrays size 2 containing pointers to char

    char m = 'm';

    //character value holding the value 'm'

    array_of_pointers[4][1] = &m;

    //Get position 4 of array, then get position 1, then put m ptr in there.

    printf("%c", *array_of_pointers[4][1]);

    //Get position 4 of array, then get position 1 and dereference it.

    如何创建指向2D数组字符的指针:

    char (*pointer_to_array)[5][2];

    //A pointer to an array size 5 each containing arrays size 2 which hold chars

    char m = 'm';

    //character value holding the value 'm'

    (*pointer_to_array)[4][1] = m;

    //dereference array, Get position 4, get position 1, put m there.

    printf("%c", (*pointer_to_array)[4][1]);

    //dereference array, Get position 4, get position 1

    更多相关内容
  • ![图片说明](https://img-ask.csdn.net/upload/201604/18/1460964771_211986.png) 错误是“{ expected after token ; ” 请问为什么会出现这样的错误,该怎么解决?
  • 主要介绍了Java编程中二维数组初始化和基本操作实例,是Java入门学习中的基础知识,需要的朋友可以参考下
  • 二维字符串数组初始化-动态内存分配 http://blog.csdn.net/gangwazi0525/article/details/5960839  昨天在用FBS200 指纹采集芯片采集到一个二维数组数据后,利用串口传输上来的数据是以十六进制的数据格式...

    二维字符串数组的初始化-动态内存分配

    http://blog.csdn.net/gangwazi0525/article/details/5960839

         昨天在用FBS200 指纹采集芯片采集到一个二维数组数据后,利用串口传输上来的数据是以十六进制的数据格式表示的二维矩阵,比如“FF” 、“BD” 、“5C ”等等这样的形式,而对于一幅灰度图像,一般都是在0 ~255 之间的数据来表示其亮度值,因此想通过二维字符串数组来对采集过来的数据进行转化显示。 但在动态分配一个 char **str  str  new char*[128] ;之后对其进行初始化时,总是出现错误,不知道如何才能很好的对其赋值,还得深入学习一下。

    其实对一个字符的转化很容易,但对一个字符串形式的字符来转化,而且是对一个多维数组来转化就有点吃力了。首先建立一个多维字符串数组,这里是二维的字符串数组,程序如下所示:

    #i nclude "stdio.h"

    void main()

    {

         char *str1[2][2] ={"FF","F9","FA","F9"};// 初始化一个二维字符串数组

         char *str;// 定义一个一维字符串变量

         int a,b;

         int i,j;

         int result1;

         for (i=0;i<2;i++)

         {

             for (j=0;j<2;j++)

             {

                  str=str1[i][j];// 对一维字符串赋值

                  printf("%s/n",str);

                  if(str[0]>='A' && str[1]>='A')

                  {

                       a=int(str[0]-'A');

                       b=int(str[1]-'A');

                       result1=(a+10)*16+(b+10)*1; // “AA” ~“FF ”之间的转化结果

                  }

                  else if (str[0]>='A' && str[1]<'A')

                  {

                       a=int(str[0]-'A');

                       b='A'-str[1]+1;

                       result1=(a+10)*16+b; // “A0” ~“F9” 之间的转化结果

                  }

                  else if (str[0]<'A' && str[1]>='A')

                  {

                       a='A'-str[0]+1;

                       b=int(str[1]-'A');

                       result1=a*16+(b+10)*1; // “0A ” ~“9F ” 之间的转化结果

                  }

                  else

                  {

                       a='A'-str[0]+1;

                      b='A'-str[1]+1;

                       result1=a*16+b; // “00” ~“99 ”之间的转化结果     

                  }

                  printf("a=%d/n",a);

                  printf("b=%d/n",b);

                  printf("%d/n",result1);    

             }

         }

    }

    这里只是用2 ×2 的字符串数组做了一个实验,一幅图像都是比较大的,这样在对数组初始化时会占用很多的内存,这样有时会造成编译无法通过,昨天就很有几次死机,当时只是用到64 ×64 的数组。后来把数组的初始化放到main 的外面,作为全局变量,在栈中静态的分配一块内存空间,虽然可行,但也很占内存,于是想到了在函数中动态分配内存,对动态分配内存又重新学习了一遍,不了解的可以和我一起学习一下。

    动态内存分配

    1. 堆内存分配 

    C/C++ 定义了4 个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap )区或自由存储区(free store )。

    堆的概念:

    通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;

        有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配。所有动态存储分配都在堆区中进行。

    当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存贮空间,用于存贮该变量或对象。当不再使用该变量或对象时,也就是它的生命结束时,要显式释放它所占用的存贮空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限的资源。

     

    2. 堆内存的分配与释放

    堆空间申请、释放的方法:

    在C++ 中,申请和释放堆中分配的存贮空间,分别使用new 和delete 的两个运算符来完成:    指针变量名=new 类型名( 初始化式) ;

             delete 指针名;

    例如:1 、 int *pi=new int(0);

          它与下列代码序列大体等价:

          2 、int ival=0, *pi=&ival;

    区别:pi 所指向的变量是由库操作符new() 分配的,位于程序的堆区中,并且该对象未命名。  

    堆空间申请、释放说明:

    ⑴.new 运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而且动态创建的对象本身没有名字。

    ⑵. 一般定义变量和对象时要用标识符命名,称命名对象,而动态的称无名对象( 请注意与栈区中的临时对象的区别,两者完全不同:生命期不同,操作方法不同,临时变量对程序员是透明的) 。

    ⑶. 堆区是不会在分配时做自动初始化的(包括清零),所以必须用初始化式(initializer) 来显式初始化。new 表达式的操作序列如下:从堆区分配对象,然后用括号中的值初始化该对象。

     

    3. 堆空间申请、释放演示:

    ⑴. 用初始化式(initializer) 来显式初始化

    int *pi=new int(0);

    ⑵. 当pi 生命周期结束时,必须释放pi 所指向的目标:

             delete pi;

    注意这时释放了pi 所指的目标的内存空间,也就是撤销了该目标,称动态内存释放(dynamic memory deallocation ),但指针pi 本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放。

    下面是关于new 操作的说明

    ⑴.new 运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有名字。 
       ⑵. 一般定义变量和对象时要用标识符命名,称命名对象,而动态的称无名对象( 请注意与栈区中的临时对象的区别,两者完全不同:生命期不同,操作方法不同,临时变量对程序员是透明的) 。

    ⑶. 堆区是不会在分配时做自动初始化的(包括清零),所以必须用初始化式(initializer) 来显式初始化。new 表达式的操作序列如下:从堆区分配对象,然后用括号中的值初始化该对象。

     
    4. 
    在堆中建立动态一维数组

    ①申请数组空间:

    指针变量名=new 类型名[ 下标表达式];

    注意:“ 下标表达式” 不是常量表达式,即它的值不必在编译时确定,可以在运行时确定。

    ②释放数组空间:

    delete [ ] 指向该数组的指针变量名;

    注意:方括号非常重要的,如果delete 语句中少了方括号,因编译器认为该指针是指向数组第一个元素的,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。delete [ ] 的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。

    #i nclude <iostream.h>

    #i nclude <string.h>

    void main(){

         int n;

         char *pc;

         cout<<" 请输入动态数组的元素个数"<<endl;

         cin>>n; //n 在运行时确定,可输入17

         pc=new char[n]; // 申请17 个字符(可装8 个汉字和一个结束符)的内存空间

         strcpy(pc,“ 堆内存的动态分配”);//

         cout<<pc<<endl;

         delete []pc;// 释放pc 所指向的n 个字符的内存空间

         return ;  }

     

    5. 动态一维数组的说明

    ① 变量n 在编译时没有确定的值,而是在运行中输入,按运行时所需分配堆空间,这一点是动态分配的优点,可克服数组“ 大开小用” 的弊端,在表、排序与查找中的算法,若用动态数组,通用性更佳。一定注意:delete []pc 是将n 个字符的空间释放,而用delete pc 则只释放了一个字符的空间;

    ② 如果有一个char *pc1 ,令pc1=p ,同样可用delete [] pc1 来释放该空间。尽管C++ 不对数组作边界检查,但在堆空间分配时,对数组分配空间大小是纪录在案的。

    ③ 没有初始化式(initializer ),不可对数组初始化。


    6.
     指针数组和数组指针

    指针类型:

    (1)int*ptr;// 指针所指向的类型是int 
    (2)char*ptr;//
     指针所指向的的类型是char 
    (3)int**ptr;// 指针所指向的的类型是int* (也就是一个int * 型指针) 
    (4)int(*ptr)[3];// 指针所指向的的类型是int()[3] // 二维指针的声明

    指针数组:

    一个数组里存放的都是同一个类型的指针,通常我们把他叫做指针数组。

    比如 int * a[2]; 它里边放了2 个int * 型变量 .

    int * a[2] ; 
    a[0]= new int[3]; 
    a[1]=new int[3]; 
    delete a[0]; 
    delete a[1];

    注意这里 是一个数组,不能delete [] ;

     

    数组指针:

      一个指向一维或者多维数组的指针.

    int * b=new int[10];  指向一维数组的指针b ; 
    注意,这个时候释放空间一定要delete [] , 否则会造成内存泄露, b 就成为了空悬指针

    int (*b2)[10]=new int[10][10]; 注意,这里的b2 指向了一个二维int 型数组的首地址. 
    注意:在这里,b2 等效于二维数组名,但没有指出其边界,即最高维的元素数量,但是它的最低维数的元素数量必须要指定!就像指向字符的指针,即等效一个字符串, 不要把指向字符的指针说成指向字符串的指针。

    int(*b3) [30] [20];  // 三级指针――> 指向三维数组的指针; 
    int (*b2) [20];     // 二级指针;――> 指向二维数组的指针; 
    b3=new int [1] [20] [30]; 
    b2=new int [30] [20]; 
    删除这两个动态数组可用下式: 
    delete [] b3;  // 删除(释放)三维数组; 
    delete [] b2;  // 删除(释放)二维数组;

    在堆中建立动态多维数组

    new 类型名[ 下标表达式1] [ 下标表达式2]……;

    例如:建立一个动态三维数组

    float (*cp)[30][20] ;  // 指向一个30 行20 列数组

                                 // 的指针,指向二维数组的指针

    cp=new float [15] [30] [20];

          // 建立由15 个30*20 数组组成的数组;

    注意:cp等效于三维数组名,但没有指出其边界,即最高维的元素数量,就像指向字符的指针即等效一个字符串,不要把指向字符的指针,说成指向字符串的指针。这与数组的嵌套定义相一致。

    展开全文
  • 二维字符数组的定义,初始化

    千次阅读 2021-01-14 17:57:26
    因为每次初始化字符数组的时候都有点问题,所以特意发一篇博客提醒一下自己。 二维字符数组的定义 ...二维字符数组初始化 通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如: char c[3][8]={{"app

    因为每次初始化字符数组的时候都有点问题,所以特意发一篇博客提醒一下自己。

    二维字符数组的定义

    二维字符数组的定义格式为:

    char 数组名[第一维大小][第二维大小];
    

    如:

    char c[3][10]; //定义了一个3行10列的二维字符数组c
    

    由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。

    二维字符数组的初始化

    通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:

    char c[3][8]={{"apple"},{"orange"},{"banana"}};
    

    等价于:

    char c[3][8]={"apple","orange","banana"};
    

    以上两条初始化语句中,二维数组的第一维大小均可省略。

    展开全文
  • 二维字符数组一般用于存储和处理多个字符串二维字符数组中的每一行均可存储表示一个字符串二维字符数组的定义二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小];如:char c[3][10]; //定义了一个3...

    二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。

    二维字符数组的定义

    二维字符数组的定义格式为:

    char 数组名[第一维大小][第二维大小];

    如:

    char c[3][10]; //定义了一个3行10列的二维字符数组c

    由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。

    二维字符数组的初始化

    通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:

    char c[3][8]={{"apple"},{"orange"},{"banana"}};

    等价于:

    char c[3][8]={"apple","orange","banana"};

    以上两条初始化语句中,二维数组的第一维大小均可省略。数组 c 的逻辑结构如下所示:

    0

    1

    2

    3

    4

    5

    6

    7

    c[0]

    a

    p

    p

    l

    e

    \0

    \0

    \0

    c[1]

    o

    r

    a

    n

    g

    e

    \0

    \0

    c[2]

    b

    a

    n

    a

    n

    a

    \0

    \0

    二维字符教组的引用

    可以使用行下标和列下标引用二维字符数组中的每个元素(字符),例如:

    char c[][10]={"apple","orange","banana"};

    以下均是对二维字符数组元素的合法引用:

    printf ("%c",c[1][4]); //输出1行4列元素'g'字符

    scanf ("%c",&c[2][3]); //输入一个字符到2行3列元素中

    c[2][0]='B'; //把字符赋值给2行0列元素

    printf ("%s",c[1]); //c[1]为第2行的数组名(首元素地址),输出 orange

    scanf ("%s",c[2]); //输入字符串到c[2]行,从c[2]行的首地址开始存放

    以下是对二维字符数组元素的非法引用:

    c[0][0]="A"; //行、列下标表示的为字符型元素,不能使用字符串赋值

    printf ("%c",c[2]); //c[2]为第3行的首地址,不是字符元素,故不能用%c

    【例 1】 分析以下程序,输出其运行结果。

    #include

    int main (void)

    {

    char c[3][5] = {"Apple","Orange","Pear"};

    int i;

    for(i=0;i<3;i++)

    printf ("%s\n",c[i]);

    return 0;

    }

    分析:本题主要考查二维数组的逻辑结构和存储结构的区别。二维数组在逻辑上是分行分列的,但其存储结构却是连续的。

    字符串 "Apple" 的长度为 5,加上结束符 "\0" 共 6 个字符,前 5 个字符分别从 c[0] 行的首元素 c[0][0] 开始存放,到 c[0][4],第 6 个字符 '\0' 只能保存到 c[1] 行的首元素 c[1][0]。

    字符串 "Orange" 的长度为 6,该字符串的前 5 个字符分别从 c[1] 行的首元素 c[1][0] 开始存放,到 c[1][4],第 6 个字符及结束符 '\0' 顺序存到 c[2][0] 和 c[2][1]。

    字符串 "Pear" 的长度为 4,该字符串的 5 个字符(包含 '\0')分别从 c[2] 行的首元素 c[2][0] 开始存放,到 c[2][4]。

    故该数组各元素中的值如下所示。

    0

    1

    2

    3

    4

    c[0]

    A

    p

    p

    l

    e

    c[1]

    O

    r

    a

    n

    g

    c[2]

    P

    e

    a

    r

    \0

    由上述可以发现,该二维字符数组空间仅有一个字符串结束符 '\0',而 printf("%s",地址); 的功能是输出一个字符串,该串是从输出列表中的地址开始,到第一次遇到为止之间的字符组成的串。

    c[0] 为 c[0] 行的首地址,即 &c[0][0]。

    printf ("%s\n",c[0]); //输出AppleOrangPear

    printf ("%s\n",c[1]); //输出OrangPear

    printf ("%s\n",c[2]); // Pear

    运行结果为:

    AppleOrangPear

    OrangPear

    Pear

    注意,本例题仅是为了说明数组的逻辑结构和存储结构的区别,程序设计时,应避免这种情况。

    展开全文
  • 许多c语言书中,很少谈到如何用malloc动态初始化一个二维数组。下面,我写了一段代码,要动态初始化二维数组。#include#include int** test(int m, int n) {int** a=(int**)malloc(sizeof(int*)*m);int i;for (i=0;i...
  • 字符串数组初始化

    千次阅读 2019-12-18 11:30:04
    String Array Initialization (字符串数组初始化) 在ReactNative的源码中有这样一个宏定义: #define RCT_EXPORT(JS_name) __attribute__((used, section("__DATA,RCTExport" \ ))) static const char *__rct_...
  • 题目:给定一文本数据,以 “|” 为分隔符,将其进行分段处理。...博主比较水,第一时间想到的是用二维数组来进行分段,代码如下: char DstMessage[ ][50] = {0}; char Begin=0,End=0,Index=0; for(;.
  • C语言的二维数组初始化的几种方式介绍1、直接赋值2、循环对每个元素赋值3、借用memset/memset_s初始化为0或-14、`数组所有元素初始化为相同值` 1、直接赋值 适合数组元素较少的,各元素的值可以不同。 int[2][3] arr...
  • 主要介绍了Java数组的定义、初始化、及二维数组用法,结合具体实例形式分析了java数组概念、功能、数组定义、静态数组、动态数组二维数组等相关使用技巧,需要的朋友可以参考下
  • 文章目录example1:已知行列,进行初始化example2:输入字符串,将其中的数字分离出来example3:scanf输入多个参数 example1:已知行列,进行初始化 1.使用代码初始化二维数组 2.使用输入初始化二维数组 用malloc...
  • JAVA二维数组两种初始化方法以及四种遍历方法 public class Arrays { public static void main(String[] args) { //动态初始化 int[][] arr = new int[5][]; System.out.println("============================...
  • C#二维字符串数组初始化问题

    千次阅读 2011-07-14 22:22:55
    string[][] array = new string[3][]{{'a','b','c'},{'d',e','f'},{'g',h','i'}}; 一直提示错误,经过查证资料 string[][] array = new string[][] { new ...而且string[][]和string[,]数组是不一样的,不能相互转换
  • 二维字符数组、二维字符串数组初始化 char s7[][4] = { "aaa","bbb","ccc","ddd" }; //由于数组第二维为4,去掉默认在字符串尾部添加的'\0'字符,赋值时每个字符串长度不能超过4-1。长度小于3时,空余部分填充的...
  • C++二维数组声明与初始化的示例

    千次阅读 2020-06-08 19:52:14
    C++二维数组初始化 #include <iostream> #include <string> using namespace std; int main() { int **a = new int *[10]; char **c = new char *[10]; string *str = new string[10]; char temp[20...
  • 二维指针数组初始化行数为:row列数为:column方式一:int **dp1;dp1 = (int **)malloc(sizeof(int *) * row);//分配指针数组,计算行的大小for(int i=0; i方式二:int*ptr[row];for(int i=0;i方式三:int (*ptr)...
  • 字符数组初始化为空

    万次阅读 2020-04-08 16:38:20
    字符数组初始化为空1. 总结起来有以下三种方式:2. 分析3. 结论 1. 总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={’\0’}; (3) char str[10] = ‘\0’; 2. 分析 第(1)(2)种方式是将str数组的...
  • Java二维数组初始化的方法

    千次阅读 2021-02-27 22:25:21
    初始化方面,二维数组有三种方法,相信很多人只是掌握了其中的一种。下面本篇就Java二维数组简单介绍,然后就三种初始化方法带来详解。1.二维数组说明数组是一个容器,用来存储数据的。现在数组中存储的不再是int...
  • 二维字符数组与字符串数组的使用

    千次阅读 2020-03-20 17:34:15
    二维字符数组与字符串数组的使用 一维字符数组的定义形式如下: <存储类型>char<数组名>[<常量表达式>]={<初始值>}; 二维字符数组定义的形式是: <存储类型>char<数组名>...
  • c语言二维字符数组初始化和赋值

    万次阅读 2014-12-24 15:04:28
    char *argv[256];//二维字符数组 memset(argv,0,256);...j++)//二维字符数组初始化申请内存 { argv[j]=(char*)malloc(sizeof(char*)); } //argv=(char*[256])malloc(256); std::vector results=StringSplit(cm
  • 字符数组初始化字符串的使用

    千次阅读 2020-10-15 18:55:45
    文章目录字符数组的定义字符数组初始化字符串存放'\0'的作用 字符数组的定义 同整型数组一样: char c[10]; char ch[3][4]; 字符数组初始化 定义数组时初始化,如: char c[10]={'a','b','c','d'}; 如果输出格式为...
  • golang二维数组初始化

    千次阅读 2020-10-21 21:42:00
    golang二维数组初始化来看一下,有点特别 func main() { x := 2 y := 4 table := make([][]int, x) for i := range table { table[i] = make([]int, y) } }
  • 二维字符串数组 数组简述 数组是构造类型之一 数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。 数组中个元素的数据类型要求相同,用数组名和下标确定,数组可以是一维的也可以是...
  • python 字符串二维数组转换

    千次阅读 2021-03-05 20:57:22
    问题场景:需要rsync一批文件,每个rsync信息又是一个list。想将这部分信息以字符串的形式...此次测试虽然实现字符串转列表功能,但是不能处理字符串、数字型等高级问题,只是自己用着方便(重新造轮子)。#!/bin/env ...
  • 很清楚展现了数组的定义, 初始化, 输入和输出 ,字符数组的应用,以及多维数组应用。
  • 下面小编就为大家分享一篇python中字符串二维数组的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 只有字符串常量才能初始化指针数组,不能由非字符串的类型直接初始化指针数组!! 补充:如何动态分配二维数组
  • 【Python】Python的二维数组初始化

    千次阅读 2020-09-01 18:56:19
    Python一维数组初始化 ...Python的一维数组初始化时没有太大问题,但是二维初始化就不能这么搞了,不信你看 In [5]: a = [[0]*5]*5 In [6]: a Out[6]: [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0,.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,625
精华内容 32,250
关键字:

二维字符串数组初始化