数组名和指针变量的差异

数组名和指针主要有如下三点差异:

  • 数组名是只读的,指针变量可读可写。
  • 使用sizeof时,sizeof(数组名)得到整个数组所占字节数,sizeof(指针变量)得到指针变量所占字节数(和整型变量相同)。
  • 当数组用作函数参数的时候,数组就是完完全全的指针。

例:

int *p;
int arr[10];

对于上面两个定义。可以通过p[i]访问数组成员,也可以通过*(arr+i)访问数组成员,这是两者相同的地方。
  但是p可以重新赋值,例如p=arr是允许的,而arr=p是禁止的。同理,p++,++p都可以,但是arr不可以做自增运算,因为自增运算需要写入。
  sizeof(p)为4,sizeof(arr)为40。(假设32bit机器)
  当上述arr的定义出现在函数参数中时,那么在函数中,arr++和++arr,甚至arr=p都是可以的,sizeof(arr)也等于4(假设32bit机器),因为当数组作为函数参数的时候,该数组就完完全全是指针了。

下面是曾经考过的几个题目,大家可以再做做。
/*************************************************************************/
第5题(单选/3分):

void example(char acHello[])
{
    printf("%d", sizeof(acHello));
}

void main(void)
{
    char acHello[] = "hello";
    example(acHello);
}
以上程序的输出结果是: A

A  4
B  5
C  6
D  hello

/*************************************************************************/
第21题(多选/4分):

int a[9] = {0};
int *p;
p = a;
请问以下哪些可以正确表示a[1]的值:A D

A *(p+1)
B *(p++)	/*此处错位在于++i和i++的用法*/
C *(a++)
D *(a+1)

/*************************************************************************/

19题(多选/4分):以下为Windows NT 下的32位 C程序,
char str[] = "Hello";
char *p = str;
int n = 10;
void *ptr = (void *)malloc(100);
长度为4的是:B C D

A sizeof(str)
B sizeof(p)
C sizeof(n)
D sizeof(ptr)

/*************************************************************************/

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值