五、指针练习


对应的视屏链接:鲍松山的个人空间_哔哩哔哩_bilibili


目录

1、用变量a给出下面的定义

2、一维数组操作练习

3、二维数组操作练习

4、写出下面程序运行的答案


1、用变量a给出下面的定义

a) 一个整型数

b) 一个指向整型数的指针

c) 一个指向指针的指针,它指向的指针是指向一个整型数

d) 一个有10个整型数的数组

e) 一个有10个指针的数组,该指针是指向一个整型数

f) 一个指向有10个整型数的数组的指针

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

2、一维数组操作练习

int main()
{
    int ar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    printf("%d\n", sizeof(ar));
    printf("%d\n", sizeof(ar + 0));
    printf("%d\n", sizeof(*ar));
    printf("%d\n", sizeof(ar + 1));
    printf("%d\n", sizeof(ar[1]));
    printf("%d\n", sizeof(&ar));
    printf("%d\n", sizeof(*&ar));
    printf("%d\n", sizeof(&ar + 1));
    printf("%d\n", sizeof(&ar[0]));
    printf("%d\n", sizeof(&ar[0] + 1));
    return 0;
}

3、二维数组操作练习

int main()
{
    int a[10][10] = { 0 };
    printf("%d\n", sizeof(a));
    printf("%d\n", sizeof(a[0][0]));
    printf("%d\n", sizeof(a[0]));
    printf("%d\n", sizeof(a[0] + 1));
    printf("%d\n", sizeof(*(a[0] + 1)));
    printf("%d\n", sizeof(a + 1));
    printf("%d\n", sizeof(*(a + 1)));
    printf("%d\n", sizeof(&a[0] + 1));
    printf("%d\n", sizeof(*(&a[0] + 1)));
    printf("%d\n", sizeof(*a));
    printf("%d\n", sizeof(a[3]));
    return 0;
}

4、写出下面程序运行的答案

int main() 
{ 
    int ar[5] = { 10, 20, 30, 40, 50 }; 
    int *ptr = (int *)(&ar + 1); 
    printf( "%d,%d\n", *(ar + 1), *(ptr - 1)); 
    return 0; 
} 
int main() 
{ 
    int ar[5] = { 10, 20, 30, 40, 50}; 
    int *ptr1 = (int *)(&ar + 1); 
    int *ptr2 = (int *)((int)ar + 1); 
    printf( "%x, %x\n", ptr1[-1], *ptr2); 
    return 0; 
} 
int main(void)
{
    int ar[5] = { 0, 1, 2, 3, 4 };
    int *p = &ar[0]; 
    p++; 
    printf("%d ", *p);
    p = p + 3; 
    printf("%d ", *p); 
    p--; 
    printf("%d ", *p);
    p = p-3;
    printf("%d ", *p);
    return 0;
}
int main() 
{ 
    int a[3][2] = { (0, 1), (2, 3), (4, 5) }; 
    int *p; 
    p = a[0]; 
    printf( "%d\n", p[0]); 
    return 0; 
}
int main() 
{ 
    int ar[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    int *ptr1 = (int *)(&ar + 1); 
    int *ptr2 = (int *)(*(ar + 1)); 
    printf( "%d,%d\n", *(ptr1 - 1), *(ptr2 - 1)); 
    return 0; 
} 
int main() 
{ 
    char *str[] = {"work","at","ablone"}; 
    char **pstr = str; 
    pstr++; 
    printf("%s\n", *pstr); 
    return 0; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值