首页
社区
课程
招聘
[注意] p352 的sizeof(addr)
发表于: 2008-11-8 15:33 3759

[注意] p352 的sizeof(addr)

2008-11-8 15:33
3759
抽空搜集了下资料..
发觉对此问题有必要另开一贴.

static char array[100];
然后sizeof(array)的值得到的是数组空间的大小.而不是指针的大小.
所以书中的那段代码是错误的.而且漏了";"符号.

array被认为指针的情况有:
1.printf 调用自变量
2.* 符号 dereferencing operator
3.指针运算符和赋值到指针的时候.

示例:
#include <stdio.h>

static char addr[100];
void size_test(char *);

int main(){
  int size_addr = sizeof(addr);

  printf("The size of array addr[100] is %d\n", size_addr);

  size_test(addr);
}

void size_test(char addr[]){
  int n = 10, size_pointer_addr, size_n1, size_n2;
  char b[2*n];

  size_n1 = sizeof(b) / sizeof(*b);
  printf("The size of array b when n is 10 = %d\n", size_n1);

  size_pointer_addr = sizeof(addr);
  printf("The size of array addr when it passed as pointer = %d \n", size_pointer_addr);
  
}

result:
The size of array addr[100] is 100
The size of array b when n is 10 = 20
The size of array addr when it passed as pointer = 4

值得注意的就是当addr 通过size_test 传指针.实际上是传指针的值的时候.
再sizeof(addr) 就为指针的size了..

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//