c语言给数组赋值的3种形式

本文详细介绍了C语言中通过循环、数组名+下标和指针操作对数组元素进行赋值的三种方法,并提供了相应的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




c语言给数组赋值的3种形式

在C语言中,对数组进行赋值的三种形式

推荐学习:C语言视频教程

1、通过循环的形式 即:数组名[下标] 对数组的元素进行依次赋值
 

#include

int main()

{

    int i;

     

    int a[10] = {0};

    for(i=0;i<10;i++)

    {

         scanf("%d",&a[i]);

    }

    for(i=0;i<10;i++)

    {

        printf("%d ",a[i]);

    }

    return 0;

}

2、通过循环的形式 数组名+下标 对数组的元素进行依次赋值

#include

int main()

{

    int i;

    int a[5];   // 数组名:a 是数组首元素的地址 -----相当于一个指针  是一个常量 

                //指针+整型值,表示地址的前移,前移的字节由指针指向的对象的类型决定

                //b+1;  前移4个字节(int型)

  

    printf("%#p\n",a);        //打印输出数组a的地址 相当于a[0]的地址

    printf("%#p\n",&a[0]);

    printf("%#p\n",a+1);

    printf("%#p\n",&a[1]);

    printf("%#p\n",a+2);

    printf("%#p\n",&a[2]);

  

    printf("请输入数组a元素的值:");

    for(i=0;i<5;i++)

    {

        scanf("%d",a+i);     //赋值给数组a

    }

    printf("a数组元素的值为:");

    for(i=0;i<5;i++)

    {

         printf("%d ",*(a+i));

    }

    return 0;

}

 3、通过循环的形式 利用指针 对数组的元素进行依次赋值

#include

int main()

{

    int i;

    int d[5] = {10,20,34,89,90};

    //指针指向一维数组,指针指向数组首元素

       //数据类型 *指针名;

    int *p = d;

    //int *p = &d[0];

  

    //指针指向数组首元素。指针名可以当数组名使用

  

  

        printf("%#p\n",p);

        printf("%d\n",d[0]);

        printf("%d\n",*++p); //++p p的地址先偏移, *p

        printf("%d\n",d[1]);

        printf("%#p\n",p);

        printf("%#p\n",&d[1]);

  

    printf("请输入数组d元素的值:");

  

    p = d;

    for(i = 0; i < 5; i++)

    {

        //scanf("%d",p+i);  //p+0 p+1 p+2 p+3

         scanf("%d",p++);  //p = p+1

    }

    //for循环结束,p偏移到元素d[4]的下一个元素

    p = &d[0];

    for(i = 0; i < 5; i++)

    {

        //printf("%d ",*(p+i));

        //printf("%d ",*p++);  //p++,后置  *p取p变化之前的内容

        printf("%d ",p[i]);  //指针指向数组首元素。指针名可以当数组名使用

    }

    printf("\n-----------------\n");

  

  

    return 0;

}

### C语言中给结构体数组赋值 #### 初始化时赋值 当定义结构体数组的同时可以直接对其进行初始化赋值。对于`struct student`类型的数组,在声明的时候就可以指定各个元素的具体取值。 ```c #include <stdio.h> // 定义结构体 struct student { char name[20]; int age; char gender[10]; }; int main() { // 创建并初始化结构体数组 struct student students[] = { {"李四", 22, "女"}, {"王五", 24, "男"} }; // 输出验证 for (size_t i = 0; i < sizeof(students)/sizeof(struct student); ++i){ printf("Student %zu:\nName:%s Age:%d Gender:%s\n", i + 1, students[i].name, students[i].age, students[i].gender); } return 0; } ``` 上述代码展示了如何一次性为整个结构体数组设置初始值[^2]。 #### 运行期间动态赋值 除了在定义时就完成赋值外,也可以先声明未初始化的结构体数组,之后再逐个为其成员赋予新值。这通常发生在程序运行过程中基于某些条件改变已有对象的状态之时。 ```c #include <string.h> #include <stdio.h> // 假设已经存在如下定义... struct student; int main(){ // 预留空间但不立即赋值 struct student students[3]; // 动态更新单个条目 strcpy(students[0].name,"赵六"); students[0].age=27; strcpy(students[0].gender,"未知"); // 或者批量处理多个记录 for(int idx=1;idx<3;++idx){ sprintf(students[idx].name,"%d号同学",idx+100); students[idx].age=(rand()%5)+20+(idx*2); strncpy(students[idx].gender,(idx%2==0?"男":"女"),9); } // 打印确认修改后的数据 ... } ``` 这里通过循环迭代的方式实现了对结构体内存区域连续位置上的多实例化填充工作。 另外值得注意的是,在特定情况下还可以利用复合字面量(compound literals)特性简化临时创建匿名结构体的过程,并将其作为整体复制到目标地址处;或是借助内存拷贝函数memcpy快速转移大块二进制流形式存在的实体副本[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值