C语言学习笔记()

一、取地址符的错用

include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
printf("%d",i);
}

如果将输出语句改为printf("%d",&i);编译并不会报错,但得不到想要的结果

二、scanf录入

1.scanf("%d%d%d",&a,&b,&c);
2.scanf("%d,%d,%d",&a,&b,&c);

注意第二种用键盘输入时元素间用空格键而不是逗号隔开

scanf("%d\n",&a);//此处多加了一个\n

函数scanf()格式控制字符串中含有’\n’等转义字符,会导致数据输入不能按照正常方式终止。此情况编译不会报错,但运行时会出错,大多是粗心导致,注意则好.

三、函数

(一)随机函数

 #include<stdio.h>
         #include<stdlib.h>
        int main()
       {   int i=0;
           for(;i<10;i++)
              printf("%d",rand()%100);}

该函数虽是随机函数,但多次运行后会发现每次输出的元素都一样,但可加入随机种子,比如以时间作为种子,因为时间不停地在变化,所以随机数也会随时间的变化而变化。

只需循环前添加srand((int)time(0)) 或者 srand((unsigned)time(NULL))即可

(二)函数的返回值

#include<stdio.h>
int fun(int x, int y); // 函数声明
void main()
{
    int a=1, b=2, c;
    c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
    printf("a,b中的较大值为%d\n",c);
}
// 自定义函数fun
int fun(int x, int y)    // 函数首部
{                        // {}中的语言为函数体
    return x>y ? x : y;  // 返回x和y中较大的一个数,这就是函数的返回值
}

注意:设置的函数为int型,则其返回值也一定是int型;
void函数无返回值。

四、数组

(一)

二维数组初始化时,可以省略行数,不可以省略列数,即定义二维数组时可以对第一维的长度不指定,但第二维的长度不能省去。
设有数组int am,如果要访问ai的值,编译器的寻址方式为:
&ai=&a0+isizeof(int)n+j*sizeof(int); //注意n为第二维的维数
因此,可以省略第一维的维数,不能省略其他维的维数。

(二)

int nums[2][2] = {{1,2},
                  {1,2}};

[ ]里面的个数必须是一个固定值,可以是常量(比如6、8)、常量表达式(比如3+4、5*7)。绝对不能使用变量或者变量表达式来表示元素个数,大多数情况下不要省略元素个数(当数组作为函数的形参和数组初始化时除外)

五、如何防止单独打开EXE文件时的闪退情况

#include <stdlib.h>      //需要添加一个头文件

......

system("pause");          //整个程序结尾处冻结屏幕,用户按任意键结束。

也可以在结尾处添加 getchar();
但并不适用于所有程序。

六、敲代码时中英文的转换问题

emmm,,,其实这不算什么问题,但就是有很多人编译报错之后找不到这个错误,其实编译后报错下方会有提示,提示也很具体,真的很具体,根据提示找错误,自己就可以解决这个问题。再者敲代码时细心一些,多注意中英文的转换,可有效避免此类问题的发生。

猜你喜欢

转载自blog.csdn.net/weixin_43399026/article/details/83515790