-
-
[注意] 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了..
发觉对此问题有必要另开一贴.
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期)
赞赏
看原图
赞赏
雪币:
留言: