char数组_char数组类型默认值 - CSDN
  • char数组赋值

    2018-10-11 09:58:18
    定义一个数组char a[10]; 怎么给这个数组赋值呢? 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的! 2、对数组中...

    定义一个数组char a[10];
    怎么给这个数组赋值呢?
    1、定义的时候直接用字符串赋值
    char a[10]="hello";
    注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
    2、对数组中字符逐个赋值
    char a[10]={'h','e','l','l','o'};
    3、利用strcpy
    char a[10]; strcpy(a, "hello");
    易错情况:
    1、char a[10]; a[10]="hello";//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!
    2、char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!
    main()
    {
    char s[30];
    strcpy(s, "Good News!"); /*给数组赋字符串*/ .
    }
    上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strcpy 为Turbo C2.0的函数)时, 首先在目标文件的某处

    展开全文
  • C语言:字符数组

    2019-12-31 21:33:27
    字符数组定义及初始化 1. 字符数组定义及初始化 //不预定数组长度,根据提供的初值,自动 char c[] = {"I love C"}; //预定数组长度 char c[100] = {&...

    1. 字符数组定义及初始化

    //不预定数组长度,根据提供的初值,自动
    char c[] = {"I love C"};
    //预定数组长度
    char c[100] = {"I love C"};
    //给一个二维数组赋初值下面两种方法等价
    char words[5][20] = {{'h','e','l','l','o'},{'t','e','a','c','h','e','r'}}
    char words[5][20] = {{"hello"},{"teacher"}}
    

    2. 函数间二维数组的引用

    //计算哈希地址
    void hash_p(hash h[],char a[]) {
    }
    //计算成功的查找的长度
    void successlenth(hash h[],char data[20][20]) {
    		p = hash_p(h,data[i]);
    }
    
    int main() {
    	char h[20];
    	char data[20][20] = {"Jan","Feb","Apr","May","Jun","Jul","Aug","Sep","Oct"};
    	successlenth(h,data);
    	return 0;
    }
    
    
    

    3. 字符串和字符串结束标志

    1. C语言中是将字符串作为字符数组来处理的
    2. 存储字符数组常量常自动加一个\0作为结束符,程序中往往依靠检测\0的位置来判定字符串是否结束,而不是根据数组的长度
    3. 字符数组并不要求它的最后一个字符为\0,甚至可以不包括\0,,是否需要加\0,完全根据需要决定

    4. 字符数组的输入输出

    1. 逐个字符输入输出,用个个格式符%c输入或输出一个字符
    #include <stdio.h>
    int main()
    {
    	char s;
    	scanf("%c",&s);
    	printf("%c",s);
    	return 0;
     } 
    
    1. 将整个字符串一次输入或输出。用%s格式符,意思是对字符串的输入输出
    #include <stdio.h>
    int main()
    {
    	char s[100];
    	scanf("%s",s);
    	printf("%s",s);
    	return 0;
     } 
    

    在这里插入图片描述
    因此可以这样处理
    在这里插入图片描述

    5. 使用字符串处理函数

    注意:使用字符串处理函数要加上头文件 #include <string.h>

    (1)gets函数:输入字符串的函数

    (2)puts函数:输出字符串的函数

    在这里插入图片描述

    (3)strcat函数:字符串连接函数

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    //字符串数组s1必须足够大,以便容纳连接后的新字符串,也就是必须声明足够大的长度
    	char s1[100] = {"I "};
    
    	char s2[] = {"love python"};
    
    	printf("%s",strcat(s1,s2));
    
    	return 0;
     } 
    

    (4)strcpy和strncpy函数:字符串复制函数

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    //字符数组s1和字符数组s2必须定义的足够大,而且必须给定长度值
    	char s1[100],s2[50],s3[]= {"python"};
    	//将字符串s3中的字符串复制到s1中
    	strcpy(s1,s3);
    	printf("%s\n",s1);
    	//使用strncpy函数将字符串s3中前3个字符复制到字符串数组s2中
    	strncpy(s2,s3,3);
    	printf("%s",s2);
    
    	return 0;
     } 
    

    (5)strcmp函数:字符串比较函数

    strcmp(字符串1,字符串2)
    比较结果:
    如果字符串1=字符串2,则函数值为0
    如果字符串1>字符串2,则函数值为正整数
    如果字符串1<字符串2,则函数值为负整数

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	char s1[] = {"abc"},s2[] = {"abd"};
    	if(strcmp(s1,s2)>0)
    		printf("yes");
    	else printf("NO");
    	return 0;
     } 
    

    (6)strlen函数:测字符串长度的函数

    (7)strlwr函数:转换为小写的函数

    (8)strupr函数:转换为大写的函数

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	char s1[] = {"abc"},s2[] = {"ABC"};
    	printf("%d\n",strlen(s1));
    	printf("%s\n",strlwr(s2));
    	printf("%s\n",strupr(s1));
    	
    	return 0;
     } 
    
    展开全文
  • charchar*,char**数组

    2016-10-20 08:53:06
    平时都用的是char数组,基本忘记了char*数组和char**数组该怎么用了 char s1[10]; s1[0]s1[1]等都是char s1是char*,等同于&s1[0]   char*s2[10]; s2[0]s2[1]等都是char* *s2[0]*s2[1]等都是char,是s2[0] s2[1]...

    平时都用的是char数组,基本忘记了char*数组和char**数组该怎么用了

    char s1[10];

    s1[0]s1[1]等都是char

    s1是char*,等同于&s1[0]

     

    char*s2[10];

    s2[0]s2[1]等都是char*

    *s2[0]*s2[1]等都是char,是s2[0] s2[1]指向的字符串的第一个字符

    s2是char**,等同于&s2[0]

     

    char**s3[10];

    s3[0]s3[1]等都是char**

    *s3[0]*s3[1]等都是char*,是s3[0],s3[1]这些char**指针指向的那个char*指针

    **s3[0]**s3[1]等都是char,是*s3[0] *s3[1]这些char*指针指向的字符串的第一个字符

    s3是char***,等同于&s3[0]

    char s1[3];

            char*s2[3];

            char**s3[3];

            s1[0]='1';

            s1[1]='2';

            s1[2]='3';

            s2[0]=&s1[0];

            s2[1]=s1;

            s3[0]=&s2[0];

            s3[1]=s2;

    内存中的数据如下图

    char、char*、char**数组

     

     

    明确这一点:指针的值就是它所指向的那个地址,对指针做*运算,就是把指针所指向的那个地址的值取出来

     

    s1[0] s1[1] s1[2]存放的是字符

    s1这个char*指针的值是0x0012ff60,说明s1这个char*指针指向的地址是0x0012ff60,这个地址处存放着s1[0]这个字符。

     

    s2[0]是一个char*指针,指向字符串”1234”

    *s2[0]是第一个字符‘1’

    s2这个char**指针的值是0x0012ff4c,说明s2这个char**指针指向的地址是0x0012ff4c,这个地址处存放着一个char*指针,也就是s2[0]。

    s2[0]这个char*指针的值是0x0012ff60,和s1这个char*指针的值相同,说明s2[0]这个char*指针指向的地址也是0x0012ff60,这个地址存放着s1[0]这个字符。

            s2[0]=&s1[0];

            s2[1]=s1;

            因为s1等同于&s1[0],所以s2[1]这个char*指针的值也是0x0012ff60。

     

     

            s3这个char***指针的值是0x0012ff38,说明s3这个char***指针指向的地址是0x0012ff38,这个地址处存放着一个char**指针,也就是s3[0]。

            s3[0]这个char**指针的值是0x0012ff4c,和s2这个char**指针的值相同,说明s3[0]这个char**指针指向的地址也是0x0012ff4c,这个地址存放着s2[0]这个char*指针

    s3[0]=&s2[0];

            s3[1]=s2;

            因为s2等同于&s2[0],所以s3[1]这个char**指针的值也是0x0012ff4c

     

        下面是一张简单的示意图

       char、char*、char**数组

    char s1[4]="123";

             //char* s2=&s1[0];

             char* s2=s1;

             char**s3=&s2;

             cout<<s2<<endl;

             cout<<s3<<endl;

             cout<<*s3<<endl;

             printf("%d\n",s3);

             printf("%x\n",s3);

    上面这段代码的输出如下图

    char、char*、char**数组

    (1245012转成16进制就是12ff54)

    可以看到,cout<<s2输出的是s2这个char*指针指向的地址处存放的数据,是一个字符串。

    cout<<s3  输出的是s3这个char**指针指向的地址处存放的数据,是一个char*指针(指针就是一个地址),其值是0012ff54,也就是说这个char*指针指向的地址是0012ff54

    cout<<*s3 输出的是s3这个char**指针指向的那个char*指针所指向的地址处存放的数据,是一个字符串。

    可以总结,打印输出一个指针,输出的是指针所指向的地址处所存储的数据

     

    变量其实就是一个地址。普通变量比如inti,i这个变量名就等同于内存中为这个变量分配的地址中存放的数据,这里是一个4字节的整数。和汇编中的直接寻址是不是很像?

    指针变量比如char*s,s这个变量名还是等同于内存中为这个变量分配的地址中存放的数据,不过这里的数据不是普通的整数或浮点数数据,而是一个4字节的地址。*s就是这个4字节的地址处存放的数据。是不是和汇编中的间接寻址很像?&s就是内存中为这个变量分配的地址。考虑到我们输出s的时候,输出的都是s这个地址处存放的数据,如果想知道s这个4字节地址本身的值,可以inti=(int)s。

    char、char*、char**数组
    展开全文
  • const char* p;表示p是一个指向常量字符的指针 char* const p;表示p是一个指向字符的常量指针,p是不允许改变的 另外要注意的是 const char* p等价于 char const *p 也就是说const描述char和*p是等价的 char* p的...

    const用法

    const char* p;表示p是一个指向常量字符的指针
    char* const p;表示p是一个指向字符的常量指针,p是不允许改变的
    

    另外要注意的是

    const char* p等价于 char const *p

    也就是说const描述char和*p是等价的

    char* p的内存分配方式

    char* p_char=“123”;

    上面的代码相当于是在常量区存储一个"123",然后创建一个指针p_char指向这个区域

    这样创建的p_char是一个常量,在程序运行结束之后才会销毁。

    在部分编译器里面,会报如下问题,即不能把字符串常量转变为char*

    warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    如果要解决这个问题,需要在char*前面加上const,让两者类型一致即可。

    p_char[0]="4";错误做法,常量区的内容不能修改,所以感觉char* p方法定义的变量不能传入strcmp()之类的函数里面。<br>
    p_char="1234";正确做法,指针指向的地址是可以修改的。<br>
    
    展开全文
  • charchar*、char**数组

    2015-08-18 10:50:39
    平时都用的是char数组,基本忘记了char*数组和char**数组该怎么用了 char s1[10]; s1[0] s1[1]等都是char s1是char*,等同于&s1[0]   char*s2[10]; s2[0] s2[1]等都是char* *s2[0] *s2[1]等都...

    平时都用的是char数组,基本忘记了char*数组和char**数组该怎么用了

    char s1[10];

    s1[0] s1[1]等都是char

    s1char*,等同于&s1[0]

     

    char*s2[10];

    s2[0] s2[1]等都是char*

    *s2[0] *s2[1]等都是char,是s2[0] s2[1]指向的字符串的第一个字符

    s2char**,等同于&s2[0]

     

    char**s3[10];

    s3[0] s3[1]等都是char**

    *s3[0] *s3[1]等都是char*,是s3[0],s3[1]这些char**指针指向的那个char*指针

    **s3[0] **s3[1]等都是char,是*s3[0] *s3[1]这些char*指针指向的字符串的第一个字符

    s3char***,等同于&s3[0]

    char s1[3];

             char*s2[3];

             char**s3[3];

             s1[0]='1';

             s1[1]='2';

             s1[2]='3';

             s2[0]=&s1[0];

             s2[1]=s1;

             s3[0]=&s2[0];

             s3[1]=s2;

    内存中的数据如下图

    char、char*、char**数组

     

     

    明确这一点:指针的值就是它所指向的那个地址,对指针做*运算,就是把指针所指向的那个地址的值取出来

     

    s1[0] s1[1] s1[2]存放的是字符

    s1这个char*指针的值是0x0012ff60,说明s1这个char*指针指向的地址是0x0012ff60 这个地址处存放着s1[0]这个字符。

     

    s2[0]是一个char*指针,指向字符串”1234”

    *s2[0]是第一个字符 ‘1’

    s2这个char**指针的值是0x0012ff4c,说明s2这个char**指针指向的地址是0x0012ff4c,这个地址处存放着一个char*指针,也就是s2[0]

    s2[0]这个char*指针的值是0x0012ff60,和s1这个char*指针的值相同,说明s2[0]这个char*指针指向的地址也是0x0012ff60,这个地址存放着s1[0]这个字符。

             s2[0]=&s1[0];

             s2[1]=s1;

             因为s1等同于&s1[0],所以s2[1]这个char*指针的值也是0x0012ff60

     

     

             s3这个char***指针的值是0x0012ff38,说明s3这个char***指针指向的地址是0x0012ff38,这个地址处存放着一个char**指针,也就是s3[0]

             s3[0]这个char**指针的值是0x0012ff4c,和s2这个char**指针的值相同,说明s3[0]这个char**指针指向的地址也是0x0012ff4c,这个地址存放着s2[0]这个char*指针

    s3[0]=&s2[0];

             s3[1]=s2;

             因为s2等同于&s2[0],所以s3[1]这个char**指针的值也是0x0012ff4c

     

         下面是一张简单的示意图

       char、char*、char**数组

    char s1[4]="123";

              //char* s2=&s1[0];

              char* s2=s1;

              char**s3=&s2;

              cout<<s2<<endl;

              cout<<s3<<endl;

              cout<<*s3<<endl;

              printf("%d\n",s3);

              printf("%x\n",s3);

    上面这段代码的输出如下图

    char、char*、char**数组

    1245012转成16进制就是12ff54

    可以看到,cout<<s2输出的是s2这个char*指针指向的地址处存放的数据,是一个字符串。

    cout<<s3  输出的是s3这个char**指针指向的地址处存放的数据,是一个char*指针(指针就是一个地址),其值是0012ff54,也就是说这个char*指针指向的地址是0012ff54

    cout<<*s3 输出的是s3这个char**指针指向的那个char*指针所指向的地址处存放的数据,是一个字符串。

    可以总结,打印输出一个指针,输出的是指针所指向的地址处所存储的数据

     

    变量其实就是一个地址。普通变量比如int i,i这个变量名就等同于内存中为这个变量分配的地址中存放的数据,这里是一个4字节的整数。和汇编中的直接寻址是不是很像?

    指针变量比如char*s,s这个变量名还是等同于内存中为这个变量分配的地址中存放的数据,不过这里的数据不是普通的整数或浮点数数据,而是一个4字节的地址。*s就是这个4字节的地址处存放的数据。是不是和汇编中的间接寻址很像?&s就是内存中为这个变量分配的地址。考虑到我们输出s的时候,输出的都是s这个地址处存放的数据,如果想知道s这个4字节地址本身的值,可以int i=(int)s。

    char、char*、char**数组

    展开全文
  • 在C语言中,对字符串的操作主要有两种方式,一是使用字符数组char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。   一、字符数组  使用char str[]定义一个字符数组...
  • char数组与char指针

    2019-02-24 19:43:08
    转载来源: ... ... 一、‘\0’的添加 存在的C语言方法,如strlen(s),计算字符串的长度,其中s指针。 strlen要计算字符串长度,必须知道哪里是结尾,因此使用\0表示结尾。 只有字符数组才有\...
  • char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现...使用char类型数组代替string类型, 至于id前的0 ...
  • char数组

    2013-10-18 09:31:36
    char myword [] = { 'H', 'e', 'l', 'l', 'o', '\0' }; char myword [] = "Hello"; string mystring; char myntcs[]="some text"; mystring = myntcs;
  • char array

    2019-08-01 21:23:29
    1#include<iostream>2#include<vector>3#include<string>4usingnamespacestd;56intmain()7{8constchar*p="hello";9intcount=0;10while(*p)11{1...
  • String转Char数组如下: Char数组转String如下:
  • QString 和char数组转换

    2019-01-10 21:32:03
    作为一个QT小白,在做串口等方面的...QString 和char数组转换 在qt开发过程中经常遇到QString类和char数组进行转换,在此记录一下:来自51CTO博客作者luoqiuwang的原创作品(http://blog.51cto.com/luoqiu/1606129...
  • 字符串转换为16进制char数组字符串转换为16进制char数组
  • Java 将多个char数组组合到单个char数组中的值 源码 /** * 类型转换: char转int * * 1.char-'0' 将char转int * 2.Character.getNumericValue(char ch) 将char转int * * @author www.only-demo.com * */ ...
  • 最近使用java做作业,使用char数组去读取字符转化成字符串,然后与另一值相同的字符串使用equals比较,输出发现值一样,但是equals的比较结果却为false。 最后通过debug发现String对象的内部也是一个char数组,通过...
  • 因为char数组不以‘\0’结尾,所以连接两个char型数组无法直接使用strcat等函数,可以采用sprintf函数   string s; char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; char a2[] = {'H', 'I', 'J', 'K', 'L', ...
  • Char数组与NSString之间可以通过stringWithCString:encoding和 cStringUsingEncoding:来转换,但是最近在工作中发现将一个unsigned char数组(里面存储的是十六进制的数据)转化成NSString时,得到的结果有些数据却...
  • 在&lt;stdlib.h&gt;头文件中有两个函数,int atoi(char *p)和char *itoa(int p),分别将装有整数的char数组转化为整数,和将整数按位数分解依次存入char数组中。
  • char数组和char*初始化

    2017-12-27 15:55:54
    char*动态分配: 用c语言中的(char*)malloc(sizeof(char)*n),或c++...char数组初始化 初始化 char str[10]="Hello"; char str[10]={'H','e','l','l','o','\0'}; char str[10]={'H'}; char str[10]={0
  • 结构体转为char数组
1 2 3 4 5 ... 20
收藏数 787,709
精华内容 315,083
关键字:

char数组