变量 内存 指针(七) 指针与数组练习

 第一组练习 

指针与数组练习
指针与数组练习 运行结果

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int cnt;
    
    printf("请输入数组的个数(>0):\n");
    scanf("%d", &cnt);
    if (cnt<=0) return 0;

    int (* const p)[5]=malloc(cnt*4*5); //p是指向int[5]的指针
            //由于已经分配了空间, 这时可以看作二维数组了
            //区别1: 这个伪二维数组在堆上, 真数组在栈上
            //区别2: p是指针变量, 在栈内占用4个字节, 有自己的地址
            //区别3: &p得到的是指针变量的地址, 所以&p!=p, 真数组&运算是相等的
    int i;

    for (i=0; i<cnt; i++){
	printf("请输入%d号数组的5个成员:\n", i);    //以下三行写法等价
        scanf("%d%d%d%d%d", *(p+i), *(p+i)+1, *(p+i)+2, *(p+i)+3, *(p+i)+4);
        //scanf("%d%d%d%d%d", p[i], p[i]+1, p[i]+2, p[i]+3, p[i]+4);
        //scanf("%d%d%d%d%d", &p[i][0], &p[i][1], &p[i][2], &p[i][3], &p[i][4]);
    }
    
    
    for (i=0; i<cnt; i++){
	printf("%d号数组的5个成员: ", i);
        printf("%d %d %d %d %d\n", p[i][0], p[i][1], p[i][2], p[i][3], p[i][4]);
    }
    
    free(p);
    system("pause");
    return 0;
}

 第二组练习

练习2结果
练习2的运行结果
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *s1;
    int * i2;
    void * const p=malloc(8);
    
    s1=p;
    i2=p;
    
    if (s1==i2)	//指针比较时, 只比较地址, 不比较类型
		puts("s1,i2相等");
    if (s1==p)
		puts("s1,p相等");
    
    //变量是"特定内存中的数据"
    //可以通过指针的解引用来读/写
    s1[0]='a';    s1[1]='b';
    s1[2]='c';    s1[3]='\0';
    puts(p);
    
    i2[1]=321;
    printf("%d %d\n", *i2, *(i2+1));
            
    free(p);	
    system("pause");
    
    //数组在堆还是栈中?
    int *i3=malloc(4*4);	//int i3[4]=malloc(4*4); 编译失败
    int i4[4];
    printf("i3..%p\ni4..%p\n", i3, i4);
    //free(i3);		//如果这里释放i3, 下面的c3将会与i3相等
    
    char *c3=malloc(4);	
    char c4[4]="abc";
    printf("c3..%p\nc4..%p\n", c3, c4);
    free(c3);
    free(i3);
    system("pause");
    
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值