相关疑难解决方法(0)

C中的数组初始化

我对以下代码有疑问:

int main()
{
    int array1 = {1,2,3,4,5}; //error in c++ , warning in c
    int array2[] = {1,2,3,4,5};
    int array3[5] = {1,2,3,4,5};
}
Run Code Online (Sandbox Code Playgroud)

这段代码在第3行给出错误c++但不在c

我知道array1其实是一个intarray2array3是数组,那么为什么没有一个c编译器显示一个错误,但只是一个警告:"在标量初始化多余元素"

是否使用了这样的定义,为什么它有效c

c c++ arrays

19
推荐指数
3
解决办法
1957
查看次数

初始化"指向整数数组的指针"

 int (*a)[5];
Run Code Online (Sandbox Code Playgroud)

我们如何初始化一个指向上面显示的5个整数数组的指针.

以下表达是否正确?

int (*a)[3]={11,2,3,5,6}; 
Run Code Online (Sandbox Code Playgroud)

c arrays pointers initialization

15
推荐指数
2
解决办法
5万
查看次数

为什么我会收到警告:(接近初始化'ptr')和运行时的分段错误,当指针上有值时?

这是以下代码:当我尝试访问数组的第一个值时,为什么它会给出分段错误?这些警告是什么?

#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 arrays pointers initialization

3
推荐指数
1
解决办法
3140
查看次数

使用数组初始化指针时会发生什么?

我理解在某种情况下数组如何衰变成指向第一个元素的指针.

我知道int array[] = {1,2,3,4,5}创建一个数组,我们可以创建一个指针int *ptr = array,在指定之后,也指向数组的第一个元素.

问题是,当我这样做时会发生什么:int *ptr = {1,2,3,4,5}

我想printf("%d",ptr),printf("%d",ptr+1)printf("%d",ptr+2)它返回1,5并且9分别.

我试过printf("%d",*ptr),它返回一个segmentation fault

所以我看到ptr指向数组{1,2,3,4,5},并再次尝试:

for(int i=0;i<5;i++){
    printf("%d",(*p)[i]);
}
Run Code Online (Sandbox Code Playgroud)

然后它回来了 subscripted value is neither array nor pointer nor vector

然后我用Google搜索,无法真正找到我要找的东西.

c arrays pointers

1
推荐指数
1
解决办法
117
查看次数

作业优先顺序

在c中,

main()   {
 int a = (1,2,3,4);
  printf("%d",a); 
}
Run Code Online (Sandbox Code Playgroud)

产生的输出

4

这是因为逗号(,)运算符具有从右到左的优先级.但

main()   {
int a = {1,2,3,4};
 printf("%d",a);
}
Run Code Online (Sandbox Code Playgroud)

产生一个输出

1

任何人都会解释这背后的逻辑.谢谢

c operators

-2
推荐指数
1
解决办法
80
查看次数

关于int*a = {1,2,3}的有效性.为什么随后的*崩溃?

int main()
{
   int *a={1,2,3}; //which value is stored and where it is stored 
   printf("\n%d",*a); //crashes here
}
Run Code Online (Sandbox Code Playgroud)

请解释上述原因导致崩溃的原因.

c segmentation-fault

-5
推荐指数
1
解决办法
112
查看次数