一、默认给数组赋值有两种情况:
- 声明的同时初始化
int a[5]={1,2,3,4,5}; - 声明后再初始化
int a[5];
a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;
注意!在c、c++中不允许将数组声明和整体初始化分开!
如:int a[5];
a[5]={1,2,3,4,5}
这样做会导致语法错误!
错误分析:由于数组下标从零开始,a[5]根本就不存在!
就算存在,此时的a[5] 也只代表它自己!根本不能代表数组整体!
因为C/C++中,数组名就是数组第一个元素的地址,也就是一个常量指针,比如,int a[100] , b[100] 则a和b都是常量指针int*const a
(其值肯定是不同的),如果你执行a = b,那就是企图修改常量指针a的值,而在C/C++里,任何常量都是不允许被修改的。a[1]或*a才是a中第一个元素的内容。
很多数组在创建时都是第二种情况,但是一个个赋值有很麻烦有什么好的办法吗?文章来源:https://www.toymoban.com/news/detail-799421.html
二、用结构体指针给数组赋值
#include <stdio.h>
typedef struct
{
int iOne;
int iTwo;
int iThr;
}TRANS_HEAD_S;
typedef struct
{
int iUser;
}USER_HEAD_S;
int main()
{
char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0};
TRANS_HEAD_S *pstTransHead = NULL;
USER_HEAD_S *pstUserHead = NULL;
int i=0;
int *pValue = NULL;
/*pstTransHead指针指向了acBuf的头*/
pstTransHead = (TRANS_HEAD_S *)acBuf;
pstTransHead->iOne = 11;
pstTransHead->iTwo = 12;
pstTransHead->iThr = 13;
/*pstUserHead指向了acBuf的第13个字节的头,因为结构体TRANS_HEAD_S是12字节*/
pstUserHead = (USER_HEAD_S *)&pstTransHead[1];
pstUserHead->iUser = 14;
/*pValue指向了acBuf的第17个字节的头,因为结构体TRANS_HEAD_S是12字节,USER_HEAD_S是4个字节*/
pValue = (int *)&pstUserHead[1];
(*pValue) = 15;
for(i = 0; i < sizeof(acBuf); i++)
{
printf("acBuf[%d] = %d\n", i, acBuf[i]);
}
return 0;
}
结果:文章来源地址https://www.toymoban.com/news/detail-799421.html
acBuf[0] = 11
acBuf[1] = 0
acBuf[2] = 0
acBuf[3] = 0
acBuf[4] = 12
acBuf[5] = 0
acBuf[6] = 0
acBuf[7] = 0
acBuf[8] = 13
acBuf[9] = 0
acBuf[10] = 0
acBuf[11] = 0
acBuf[12] = 14
acBuf[13] = 0
acBuf[14] = 0
acBuf[15] = 0
acBuf[16] = 15
acBuf[17] = 0
acBuf[18] = 0
acBuf[19] = 0
到了这里,关于C/C++如何给高效给数组赋值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!