我对以下代码有疑问:
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其实是一个int和array2和array3是数组,那么为什么没有一个c编译器显示一个错误,但只是一个警告:"在标量初始化多余元素"
是否使用了这样的定义,为什么它有效c?
int (*a)[5];
Run Code Online (Sandbox Code Playgroud)
我们如何初始化一个指向上面显示的5个整数数组的指针.
以下表达是否正确?
int (*a)[3]={11,2,3,5,6};
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) 我理解在某种情况下数组如何衰变成指向第一个元素的指针.
我知道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中,
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
任何人都会解释这背后的逻辑.谢谢
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)
请解释上述原因导致崩溃的原因.