首页 > 技术文章 > C语言学习中遇到的小问题(一)

AlgrithmsRookie 2016-10-13 19:05 原文

C语言小白学习C语言的记录1
一、scanf一次性接收连续的数字
1.已知数量,且个数较少:scanf("%d%d%d",&a&b&c);
2.已知数量,但数量较多:for(int i=0;i<n;i++){scanf("%d",&a[i]);}
3.不知道数量,如:1 2 3 4\n    
  while(1){
        scanf("%d",&a);
        Insert(&la,i,a);
        i++;
        char c=getchar();
        if(c=='\n'){
            break;
        }
   }
二、数组的大小不确定的时候如何创建数组
int* b = (int*)malloc(n*sizeof(int));
三、使程序停止只有输入一个enter的时候才能够继续
#include <stdlib.h>  添加这个库
在需要停止的位置添加:system("pause");
四、C语言分别通过变量名还有指针来访问结构体当中的对象
      结构体成员依据结构体变量类型的不同,一般有2种访问方式,一种为直接访问,一种为间接访问。直接访问应用于普通的结构体变量,间接访问应用于指向结构体变量的指针。直接访问使用结构体变量名.成员名,间接访问使用(*结构体指针名).成员名或者使用结构体指针名->成员名。相同的成员名称依靠不同的变量前缀区分。
struct SIMPLE
{
    int a;
    char b;
};
//声明结构体变量s1和指向结构体变量的指针s2struct SIMPLE s1, *s2;
//给变量s1和s2的成员赋值,注意s1.a和s2->a并不是同一成员
s1.a = 5;
s1.b = 6;
s2->a = 3;
s2->b = 4; 
五、&取址和指针
&可以取出来一个变量在内存当中的地址,指针是一个变量其中存储的是某一个变量的地址。
通过如下程序可以看出来这一点:
#include <stdio.h>
int main()
{
    int a=0;
    int* p=&a;
    printf("%d %d",&a,&p);//显示变量a的地址还有指针p所在的地址
    printf("%d %d",&a,p);//显示变量a的地址还有指针p所存的地址
}
六、C语言当中指向同一个数组的的两个指针相减会得到数组元素的下标差而不是地址差
下面程序也给出了地址差计算的方法
int main()
{
int* a=(int*)malloc(10*sizeof(int));
int* p1=&a[6];
int* p2=&a[7];
printf("元素差:%d 地址差:%d",p2-p1,(unsigned int)p2-(unsigned int)p1);
}
七、不要试图将一个空指针放入函数当中对指针进行赋值,如下程序编译可以通过,但是运行会报错
#include <stdio.h>
void A(int* a)
{
    int b=10;
    a=&b;
}
int main(){
    int* a;
    A(a);
    printf("a = %d, b = %d\n", *a);
    return 0;
}
上面的程序无法对指针a实现赋值,因为函数A是通过值传递将指针a的值传递到A当中的,改变形式参数的值不会改变指针a的值

推荐阅读