这是如何工作的(将所有值设置为0)?
int array[28]= {0};
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用(不将所有值设置为4,但只将第一个值设置为4,其他值设置为0)?
int array[28]= {4};
Run Code Online (Sandbox Code Playgroud) 出于某种原因,我有这样的想法,C和C++的工作原理如下:
int foo[10] = {57};
for (int i=0; i<10; ++i)
assert (foo[i] == 57);
Run Code Online (Sandbox Code Playgroud)
原来剩下的整数被初始化为0而不是57.我从哪里得到这个想法?这一点是真的吗?结构初始化列表是否真的如此?当分配给= {}和= {0}时,数组和结构是否整齐且正确地开始将自己初始化为0值?除非明确说明,否则我一直认为他们会初始化为垃圾.
我被问到这个问题:
= { 0 }是什么更长的代码的"捷径"?
因此,经过我的C书的多次搜索和搜索后,我知道它对聚合初始化所做的一切,但如果我想编写这段代码的较长版本会怎样.以下是程序中的实际代码以防万一
static char vid[25][100] = { 0 } ;
Run Code Online (Sandbox Code Playgroud) 这个初始化是什么意思:
char arr[10] = { 0, };
Run Code Online (Sandbox Code Playgroud)
我很熟悉char arr[10] = {0};将所有元素设置为零,并将char arr[10] = {1,2};前两个元素设置为1和2(ascii),其余元素设置为0.我不熟悉上面的格式.快速测试显示它可能就像char arr[10] = {0};,但还有其他含义我不知道吗?
int eye[3][3] = {
{ 1,0,0 },
{ 0,1,0 },
{ 0,0,1 }
};
Run Code Online (Sandbox Code Playgroud)
是否有更短的方式来初始化它?它是如此规则,必须有一个更聪明的方式来初始化它,特别是如果它超过3x3,比如10x10或更多.
在我目前的代码中,我有类似的东西
while(true) //Infinite loop
{
char buff[60];
.....
....
}
Run Code Online (Sandbox Code Playgroud)
我想知道什么是更好的性能明智.
memset(buff, 0, 60);或之前声明char buff(将包含包含换行符和换行符的字符串)注意:
我的要求是char每次循环重启时我都需要让数组完全干净.
在C语言中,我正在创建一个数组(2维),其中所有元素都是零
我这样做的方式如下:
int a[5][5],i,j; //a is the required array
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=0;
Run Code Online (Sandbox Code Playgroud)
我也知道其他一些方式:
int a[5][5]={0};
Run Code Online (Sandbox Code Playgroud)
两者都相同或有什么区别?
什么应该是首选?
谢谢 !
这是以下代码:当我尝试访问数组的第一个值时,为什么它会给出分段错误?这些警告是什么?
#include<stdio.h>
int main(void)
{
int *ptr = {1,2,3,4,5};//Is it not similar to char *ptr="Stackoverflow"?
printf("%d\n",*ptr);// why Segmentation fault(core dumped) instead of 1
return 0;
}
...
output:
warning: initialization makes pointer from integer without a cast [enabled by default]
int *ptr = {1,2,3,4,5};
^
warning: (near initialization for ‘ptr’) [enabled by default]
warning: excess elements in scalar initializer [enabled by default]
warning: (near initialization for ‘ptr’) [enabled by default]
warning: excess elements in scalar initializer [enabled by default]
warning: …Run Code Online (Sandbox Code Playgroud) 在C中,我已经读过,半初始化的数组将用其余元素填充零(不管整数或char数组).
例如:
int arr[10] = {3};
Run Code Online (Sandbox Code Playgroud)
arr[4] 如果初始化则为0,如果未初始化则为垃圾值.
我的问题是,根据编译器选项,上述所有C编译器(或)的附加工作是否可能会发生或不发生?我在Code composer studio(TI的IDE)工作.我想确保这适用于所有案例和所有编译器.
我试图找出将数组初始化为全零的正确方法(即好像你已经在数组上做了一个memset).
我在堆栈溢出(和其他来源)的各个方面找到了以下方法:
char myArray1[10] = {0};
char myArray2[10] = {0,};
char myArray3[10] = {[0 ... 9] = 0};
char myArray4[10] = {0,0,0,0,0,0,0,0,0,0};
Run Code Online (Sandbox Code Playgroud)
我更喜欢最简单的语法变体......我使用的是{0},但我没有找到任何证明这实际上是正确的.