精华内容
下载资源
问答
  • C语言字符数组赋初值

    万次阅读 2017-11-29 21:36:50
    C语言可以字符数组赋值的方法 转载 2012年04月06日 10:23:36 标签:语言 /c 31190 学了这么多年的C语言,突然发现连字符串赋值都出错,真的很伤心。 char a[10]; 怎么这个数组...

    C语言可以给字符数组赋值的方法

    转载 2012年04月06日 10:23:36
    学了这么多年的C语言,突然发现连字符串赋值都出错,真的很伤心。

    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出现混乱,不允许!

    C语言的运算符根本无法操作字符串。在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都不能用C语言的运算符进行复制和比较操作。

    直接尝试对字符串进行复制或比较操作会失败。例如,假定str1和str2有如下声明:

    char str1[10], str2[10];

    利用=运算符来把字符串复制到字符数组中是不可能的:

    str1 = "abc";     /*** WRONG ***/

    str2 = str1;       /*** WRONG ***/

    C语言把这些语句解释为一个指针与另一个指针之间的(非法的)赋值运算。但是,使用=初始化字符数组是合法的:

    char str1[10] = "abc";

    这是因为在声明中,=不是赋值运算符。

    试图使用关系运算符或判等运算符来比较字符串是合法的,但不会产生预期的结果:

    if (str1==str2) ...    /*** WRONG ***/

    这条语句把str1和str2作为指针来进行比较,而不是比较两个数组的内容。因为str1和str2有不同的地址,所以表达式str1 == str2的值一定为0。

    原始网址:http://blog.chinaunix.net/space.php?uid=7390305&do=blog&id=2057100
    展开全文
  • C语言中其它数据类型一样,字符串也有常量和变量之分。字符串常量是由双引号括起来的一串字符。如"string"就是字符串...下面介绍一维字符数组赋初值的方法。1.将所赋初值放在一对花括号中,如: charstr[10]={...

    同C语言中其它数据类型一样,字符串也有常量和变量之分。字符串常量是由双引号括起来的一串字符。如"string"就是字符串常量,printf和scanf函数中的"%d%d"也是字符串常量。

    C语言本身并没有设置一种类型来定义字符串变量,所以字符串的存储完全依赖于字符数组,但字符数组并不等于是字符串变量。下面介绍给一维字符数组赋初值的方法。

    1.将所赋初值放在一对花括号中,如: charstr[10]={'s','t','r','i','n','g','\0'};

    此处赋初值时,人为地在最后一个有效字符后加入了串结束标志'\0'。而如果所赋初值的字符个数少于数组的元素时,系统将自动在其后所有的元素中加入串结束标志'\0'。因此,上述赋初值语句也可以写成: charstr[10]={'s','t','r','i','n','g'};

    由此可知,当使用一个字符数组来存放一个字符串时,数组的大小至少要比实际存放的最长字符串多一个元素,多出的这个元素用于存放串结束标志。否则,系统会将其视为一个普通的一维字符数组来处理。

    2.当用赋初值的方式来定义字符数组大小时,这时的定义应写成: charstr[]={'s','t','r','i','n','g','\0'};

    若上面的定义写成: charstr[]={'s','t','r','i','n','g'};

    则是错误的,因为所赋初值的末尾没有串结束标志。也就是说,上面的形式只是定义了一个有6个元素的字符数组。

    可以直接用字符串常量给一维字符数组赋初值,例如: charstr[10]={"string"};

    习惯上均省略花括号,简写成: charstr[10]="string";

    同样应注意的是字符数组大小要比字符串多一个元素,用以存放字符串结束标志。上述定义也可以写成: charstr[]="string";

    系统将按字符串实际的字符个数来定义数组的大小,在此数组 str 将包含7个元素(含系统自动加的'\0')。

    展开全文
  • 在C++中我们可以在初始化的同时赋初值 size_t test[] ={1, 1}; 但是在C中,我开始的时候只是做申明 size_t* test; 申请内存: test= (size_t *)malloc(2*sizeof(size_t)); 然后我该怎么对其赋值成1, 1呢...
  • C语言数组

    2021-01-13 12:50:58
    C语言:数组 数组是一组相同类型元素的集合 一维数组的创建方式 数组元素类型 数组名[常量表达式] 例: //例1 int arr1[10]; //例2 char arr2[3];...//完全初始化,定义数组时给...//不完全初始化,给数组中部分元素赋初值

    个人博客网址:https://ljsblog.com

    数组(四)

    数组是一组相同类型元素的集合

    一维数组的创建方式

    数组元素类型 数组名[常量表达式];
    例:

    //例1
    int arr1[10];
    //例2
    char arr2[3];
    float arr3[5];
    double arr4[10];
    //错误示例
    int n=10;
    int arr5[n];//创建数组时,[]中要给一个常量,不能使用变量
    

    一维数组的初始化

    //完全初始化,定义数组时给所有元素赋初值,例:
    int arr[5]={1,2,3,4,5};
    //不完全初始化,给数组中部分元素赋初值,其余元素自动为0:例:
    int arr1[5];={1,2};//a[0]=1 a[1]=2,其余元素自动为0
    //如果定义数组时就给数组中所有元素赋初值,那么就可以不指定数组的长度,因为此时元素的个数已经确定了。例:
    int arr2[]={1,2,3,4,5}//数组元素个数自动为5
    

    sizeof和strlen

    sizeof:计算变量,类型,数组的大小,单位是字节,sizeof是运算符。
    strlen:需要引入头文件string.h,求字符串长度,只能针对字符串,从字符串的开头位置依次向后计数,遇到\0返回字符串长度,字符串长度不包括\0,strlen是函数。
    例子:

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	char arr1[]="myblog";
    	char arr2[]={'m','y','b','l','o','g'};
    	printf("%d\n",sizeof(arr1));//7
    	printf("%d\n",sizeof(arr2));//6
    	printf("%d\n",strlen(arr1));//6
    	printf("%d\n",strlen(arr2));//随机值
    	return 0;
    }
    

    一维数组的使用

    []是下标引用操作符,数组是使用下标来访问的,下标是从0开始,元素个数是可以通过计算得到的
    例:

    #include <stdio.h>
    int main()
    {
    	int a[]={1,2,3,4,5};
    	int i=0,sz=0;
    	sz=sizeof(a)/sizeof(a[0]);
    	for(i=0;i<sz;i++)
    	{
    		printf("%d\n",a[i]);
    	}
    	return 0;
    }
    
    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	char a[]="abcde";
    	int i=0,sz=0;
    	sz=(int)strlen(a);//strlen返回值是无符号数
    	for(i=0;i<sz;i++)
    	{
    		printf("%c\n",a[i]);
    	}
    	return 0;
    }
    

    一维数组的存储

    数组在内存中是连续存储的,例。

    //取数组每个元素地址
    #include <stdio.h>
    int main()
    {
    	int a[]={1,2,3,4,5};
    	int i=0,sz=0;
    	sz=sizeof(a)/sizeof(a[0]);
    	for(i=0;i<sz;i++)
    	{
    		printf("a[%d]=%p\n",i,&a[i]);
    	}
    	return 0;
    }
    
    /*打印结果为:
    a[0]=007DF988
    a[1]=007DF98C
    a[2]=007DF990
    a[3]=007DF994
    a[4]=007DF998
    */
    

    二维数组的创建

    数组元素类型 数组名[行数][列数];

    int arr[3][4];
    /*
    定义一个3行4列的整型数组,数组名为arr,即
    a[0][0], a[0][1], a[0][2], a[0][3]
    a[1][0], a[1][1], a[1][2], a[1][3]
    a[2][0], a[2][1], a[2][2], a[2][3]
    */
    char arr[3][5];//3行5列
    double arr[2][3];//2行3列
    

    二维数组的初始化

    例1:

    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    /*
    a[0][0]=1  a[0][1]=2  a[0][2]=3  a[0][3]=4
    a[1][0]=5  a[1][1]=6  a[1][2]=7  a[1][3]=8
    a[2][0]=9  a[2][1]=10 a[2][2]=11 a[2][3]=12
    */
    

    例2:

    int a[3][4]={{1,2},{3,4}};
    /*
    a[0][0]=1  a[0][1]=2  a[0][2]=0  a[0][3]=0
    a[1][0]=3  a[1][1]=4  a[1][2]=0  a[1][3]=0
    a[2][0]=0  a[2][1]=0  a[2][2]=0  a[2][3]=0
    */
    //部分元素初始化,其余元素自动补0
    

    例3:

    int a[][4]={{1,2,3,4},{5,6,7,8}};
    /*
    a[0][0]=1  a[0][1]=2  a[0][2]=3  a[0][3]=4
    a[1][0]=5  a[1][1]=6  a[1][2]=7  a[1][3]=8
    */
    //创建二维数组中行可以省,列不可以省
    

    二维数组的使用

    #include <stdio.h>
    int main()
    {
    	int a[3][4]={{1,2,3},{4,5}};
    	int i=0,j=0;
    	for(i=0;i<3;i++)
    	{
    		for(j=0;j<4;j++)
    		{
    			printf("a[%d][%d]=%-2d ",i,j,a[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    /*
    打印结果
    a[0][0]=1  a[0][1]=2  a[0][2]=3  a[0][3]=0
    a[1][0]=4  a[1][1]=5  a[1][2]=0  a[1][3]=0
    a[2][0]=0  a[2][1]=0  a[2][2]=0  a[2][3]=0
    */
    

    二维数组的存储

    二维数组在内存中也是连续存储的,例:

    #include <stdio.h>
    int main()
    {
    	int a[3][4];
    	int i=0,j=0;
    	for(i=0;i<3;i++)
    	{
    		for(j=0;j<4;j++)
    		{
    			printf("&a[%d][%d]=%p\n",i,j,&a[i][j]);
    		}
    	}
    	return 0;
    }
    /*
    &a[0][0]=0076F914
    &a[0][1]=0076F918
    &a[0][2]=0076F91C
    &a[0][3]=0076F920
    &a[1][0]=0076F924
    &a[1][1]=0076F928
    &a[1][2]=0076F92C
    &a[1][3]=0076F930
    &a[2][0]=0076F934
    &a[2][1]=0076F938
    &a[2][2]=0076F93C
    &a[2][3]=0076F940
    可以看出二维数组每个元素的地址在内存中也是连续的
    */
    //二维数组可以看作是由多个一维数组组合而成,如果一个数组的每个元素又是一个数组,那么这个数组就是二维数组。所以一个二维数组也可以分解为多个一维数组。
    

    注意事项

    数组名是数组首元素地址,但有两种情况例外

    1. sizeof(数组名),计算整个数组大小,sizeof内部单独放一个数组名,数组名表整个数组
    2. &数组名,取出的是整个数组的地址,数组名表整个数组

    例子:冒泡排序

    #include <stdio.h>
    void Bubble_Sort(int arr[],int sz)
    {
    	int i=0,j=0,flag,tmp;
    	for(i=0;i<sz-1;i++)
    	{
    		flag=0;
    		for(j=0;j<sz-1-i;j++)
    		{
    			if(arr[j]>arr[j+1])
    			{
    				tmp=arr[j];
    				arr[j]=arr[j+1];
    				arr[j+1]=tmp;
    				flag=1;
    			}
    		}
    		if(flag==0)
    		{
    			break;
    		}
    	}
    }
    int main()
    {
    	int arr[]={9,8,7,6,5,4,3,2,1};
    	int i=0;
    	int sz=sizeof(arr)/sizeof(arr[0]);
    	Bubble_Sort(arr,sz);
    	for(i=0;i<sz;i++)
    	{
    		printf("%d ",arr[i]);		
    	}
    	return 0;
    }
    
    展开全文
  • C语言指针数组介绍,定义指针数组,输入输出指针数组 1、什么是指针数组; (1)数组里面的每一个元素不是值而是值,而是指针。 (2)把很多的指针集合在一起,就是一个指针数组 ...3、如何指针数组赋初值

    指针数组

    1、什么是指针数组;

    (1)数组里面的每一个元素不是值而是指针。
    (2)把很多的指针集合在一起,就是一个指针数组

    2、定义一个指针数组:

    类型标识符 *数组名[长度];
    比如:int *a[4];
    定义了一个数组名为a,它里面含有几个四个元素,他们分别是a[0],a[1],a[2],a[3],它们每个都是一个指针。

    3、如何给指针数组赋初值:

    //其中a是一个普通数组,b是指针数组,即b数组当中的每一个值都是指针
    int a[3] = {1,2,3},*b[3]={a,a+1,a+2};
    printf("%d",*b[0]);
    

    a ----------> a[0] <--------b[0]
    a+1 ------> a[1] <--------b[1]
    a+2 ------> a[2] <--------b[2]

    #include<stdio.h> 
    void main(){
    	int a[4]={1,2,3,4},*b[4]={a,a+1,a+2,a+3};
    	*b[0]=*b[0]+1;//2
    	*b[1]=*b[1]+1;//3
    	printf("%d,%d",a[0],a[1]);//2 3
    }
    

    在这里插入图片描述
    变换

     #include<stdio.h> 
    void main(){
    	int a[4]={1,2,3,4},*b[4]={a,a+1,a+2,a+3};
    	*b[0]=*b[0]+1;//2
    	*b[1]=*b[1]+1;//3
    	printf("%d,%d,%d",a[0],a[1],**b);//2 3 2
    }
    

    在这里插入图片描述

    **(p+1) 和 *(*p+1)的区别
    	#include<stdio.h> 
    void main(){
    	int a=1,b=4,*p[2]={&a,&b};
    	**(p+1)=a*b;//b=a*b=4
    	*(*p+1)=a+b;//*(p[0]+1)
    	printf("a=%d,b=%d",a,b);
    }
    

    在这里插入图片描述
    变换

    #include<stdio.h> 
    void main(){
     
     	char *aa[2]={"abcd","ABCD"};
    	printf("%s",*(aa+1));
    }
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 一维数组: 一、一维数组的定义格式为: 类型说明符 数组名[常量表达式];...1、在定义数组时,可以给数组赋以全部初值; 2、也可以只给一部分元素赋值,未赋值的为0; 3、 如果想使一个数组中全部元素值
  • !...上面的赋值是写在一个头文件里的,用VS2008,或者VC++6.0调都会出现上面的错误,VS2013和DEV就不会报错。 完整代码是: ...一定要把结构体数组赋初值放到main函数里面吗? 学生党一枚,请各位大大们帮忙!
  • C语言数组的定义和使用

    万次阅读 多人点赞 2014-12-09 08:35:30
    数组的定义与使用 ...一、1.一维数组的定义: ...类型说明符 数组名[常量表达式];...在定义数组时对数组元素初值; b.可以只一部分元素赋值; c.想使一个数组中全部元素值为0,可以写成:a[10]={0};
  • 在定义数组时对数组元素初值;b.可以只一部分元素赋值;c.想使一个数组中全部元素值为0,可以写成:a[10]={0};需要注意 int a[10] = {1}; 并不能把数组初始化为全1,只是将第一位初始化为1,后面...
  • 一、C语言数组的定义 1.一维数组的定义: 类型说明符 数组名[常量表达式]; 注意:常量表达式包括常量与符号常量,...在定义数组时对数组元素初值; b.可以只一部分元素赋值; c.想使一个数组中全部元素值为0...
  • 数组练习解答 1 定义一个名为 a 的单精度实型一...考虑到不省略数组长度 部分元素赋初值时所有未赋初值的元素均有空值对数值型数组来说初值为 0 可 以写出方法三参看答案 考虑到选用静态型不赋初值所有元素也自动赋予
  • c语言数组的使用

    2020-11-07 09:23:23
    一、定义 1.1 一维数组 一维数组的定义方式如下: 类型说明符 数组名[常量表达式]; 例如: int a[5]; 它定义了一个整型数组数组名为a,数组名a除了...2.1.1 完全初始化(定义数组所有元素赋初值) int a[5]={
  • 1) 定义数组所有元素赋初值,这叫“完全初始化”。例如: int a[5] = {1, 2, 3, 4, 5}; 通过将数组元素的初值依次放在一对花括号中,如此初始化之后,a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5,即从左到右...
  • 一、直接分行二维数组赋初值 例:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //推荐使用此方便赋值数组 二、将所有数据写一个花括号内 例:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 三、可以将...
  • C语言 数组和函数

    2018-07-23 20:59:15
    一、一维数组 1.定义格式: 类型说明符 数组名[常量表达式]; 例如: int a[10] ... 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只前面5个元素赋初值,后5个元素值为0。 int a[10]...
  • ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、数组的赋值,以下几种都是正确的: 1、int ages[5]={1,2,3,4,5}; 2、int ages[5]={1,2};...//只在下标3和4的数组赋初值 4、int ages[]=
  • 第九讲 数组之一 一维数组的定义及排序算法 一 数组和数组元素 一 ...数组元素的表示 3 一维数组的初始化 对数组元素的初始化可以用下面4种方法 定义时赋初值 如int a[5]={0,1,2,3,4}; 只一部分元素赋值 如int a[5]={
  • c语言:字符数组相关

    2020-10-20 12:13:30
    一.字符数组如何输入、输出字符串; 1.`char zifu[]=“wasd”;...(此时“sda”为字符串常量,相当于zifu字符串常量初值) 4.使用gets,puts函数; gets(字符数组):从键盘输入字符串,直到遇到
  • C语言数组的妙用

    2007-10-28 07:38:00
    第一个问题,我的出发点是这样的:数组中的元素,由它的下标的关系,而形成一...举几个简单的例子1 出一堆数(无重复),范围是1~100,要求将数按顺序输出那么就可以建立一da[101]的数组,每个元素赋初值为零,然后
  • c语言第七章 数组

    2019-08-28 15:59:03
    第七章数组 1.类型说明符:数组中每个元素的所属类型除void 都可以 2.数组名:遵循标识符命名规范 ...(4)在对全部数组元素赋初值时,由于数据个数已确定,因此可以不指定数组长度 冒泡排序 二,二维数组...
  • C语言中,字符数组赋初值时有如下区别 char str1[] = {'h','e','l','l','o'};//数组长度为5 char str2[10] = {'h','e','l','l','o'};//字符串长度为5 str1不是一个字符串,只是一个字符数组,这个数组的长度是5...
  • C语言程序设计-数组

    2020-04-24 16:31:42
    数组的概念: 数组是最基本的构造类型,它是一组相同类型数据的...在定义数组时,也可以对数组元素赋初值,其一般形式为: 类型名 数组名[数组长度] ={初始值} 静态存储的数组如果没有初始化,那么系统自动的...
  • C语言学习笔记之数组

    千次阅读 2016-10-28 21:43:59
    数组一维数组1、定义格式如下: 类型说明符 数组名[常量表达式] ...给数组全部赋初值,定义时可以不指定数组长度:int a[]={1,2,3,4,5}; 通过键盘初始化的方法:scanf(“%d”,&a[i]); 3、注意: 数组的各个元素在内
  • c语言 一维字符型数组

    千次阅读 2018-03-06 10:03:42
    什么是一维字符型数组:char a[5];...如何来一维字符型数组赋初值?1)一维字符型数组从“整体上看”就是一个字符串,但是其中的每一个元素还是一个字符2)关于字符串的结束符号\0 A:\0虽然有2个字符,但是\...
  • lua中Talbe结构及相关操作-lua数组 表 目标: 了解table结构 了解table的相关操作 --table 是lua中的一种数组结构,... myvar={1,2,0xf,4,5,6,7} --与c语言数组赋初值有些相似 for i=1,10 do --循环来赋值 myv...
  • 数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行 的。这样将减少运行时间,提高效率。 一维数组的初始化: 一维数组的初始化有三种形式: 可以只给部分元素赋初值,当{}中值的个数...
  • C语言中用字符数组来处理字符串* 7.2.2 二维数组的引用 与引用一维数组元素一样,也用下标法引用二... * 7.2.3 二维数组的初始化 数组定义时初始化采用方法如下: (1)分行二维数组赋初值。 如:int a[2][3]= {{...
  • C语言学习(三)数组

    2019-10-08 04:11:29
    1.1 在定义数组时对数组元素初值。 例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 1.2 可以只一部分元素赋值 例如: int a[10]={0,1,2,3,4};其余数据为0 1.3 使一个数组中全部元素值为...
  • 知识点总结:    一:二维数组及其定义 ... 1)分行二维数组赋初值  2)将所有数据写在一个花括号内  3)只对部分元素赋初值,其他元素值自动置零  二维数组定义中缺省行数(列数不可省),例:

空空如也

空空如也

1 2 3 4 5 6
收藏数 105
精华内容 42
关键字:

c语言给数组赋初值

c语言 订阅