#btn {
margin: 10px;
padding: 20px;
width: 470px;
height: 50px;
border: 2px solid #f7f7f7;
text-align: center;
text-transform: uppercase;
position: relative;
background-image:linear-gradient(to right, red,red);
background-position:50% 100%; /*OR center bottom*/
background-size:0% 2px;
background-repeat:no-repeat;
background-color:#ccc;
transition: 1s;
}
#btn:hover {
cursor: pointer;
background-size:100% 2px;
}
此代码读取数字,直到遇到<input id="btn" type="submit" name="" value="Click">
。指针#include <stdio.h>
int main()
{
int i = 0;
int *a;
do
{
scanf("%d",&a[i]);
i++;
}
while (a[i-1]!=-1);
}
未初始化,但代码仍然编译&amp;运行没有任何错误。为什么?这可以在不声明其大小的情况下初始化数组吗?
答案 0 :(得分:8)
默认情况下,GCC不会对未初始化的值发出警告。
您需要-Wuninitialized
选项:
gcc -Wuninitialized your_file.c
您应该使用-Wall
选项来启用此警告以及许多其他有用的警告。
有关警告选项here
的更多信息答案 1 :(得分:5)
这可以在不声明其大小的情况下初始化数组吗?
没有
如果将指针定义为int *a;
,则所有int
都会执行此操作,如果没有初始化,则指向某处,&#34;无处&#34;,到&#34;无效&#34;存储器中。
在[]
上调用a
- 运算符,而事先没有将a
指向任何有效的内存(例如OP代码所执行的操作)调用未定义的行为,从那时起,任何事情都可能发生,从崩溃到看似有效。
假设通过&#34; 声明&#34;你实际上是指&#34;定义&#34;使用&#34; unknown&#34;定义数组的唯一方法大小是通过在数组的定义中提供初始化(具有众所周知的大小),如下所示:
int arr[] = {-1, 0, 42}; /* Defines arr to be an array of three ints. */
创建/初始化后arr
知道大小为int
。
请注意,上面的=
符号与赋值运算符=
不同。以下代码将无法编译:
int arr[];
arr = {-1, 0, 42}; /* Invalid, as an array may not be assigned. */
为了让GCC更加健谈它所提供的代码中所有可能存在的问题,在编译时会传递以下选项:
-Wall -Wextra -pedantic -Wconversion