今天发现C语言中有两个取&等于自身的东东——数组和函数
#include <stdio.h>
int max(int x, int y)
{
return (x >= y ? x : y);
}
int main(int argc, char *argv[])
{
int arr[5] = {1, 2, 3, 4, 5};
int (*func)(int x, int y);
/* 函数调用 */
func = max;
printf("max(2, 3)=%d \n", func(2, 3));
func = &max;
printf("max(2, 3)=%d \n", (*func)(2, 3));
printf("max(2, 3)=%d \n", func(2, 3));
/* 地址打印 */
printf(" arr =%#p \n", arr);
printf("&arr =%#p \n", &arr);
printf(" max =%#p \n", max);
printf("&max =%#p \n", &max);
/* 查看内容 */
printf(" *arr =%#p \n", *arr);
printf("*(&arr) =%#p \n", *(&arr));
printf(" *max =%#p \n", *max);
printf("*(&max) =%#p \n", *(&max));
/* 地址操作 */
printf(" arr+1 =%#p \n", arr + 1);
printf("&arr+1 =%#p \n", &arr + 1);
printf(" max+1 =%#p \n", max + 1);
printf("&max+1 =%#p \n", &max + 1);
return 0;
}
典型的测试结果:
max(2, 3)=3
max(2, 3)=3
max(2, 3)=3
arr =0X0022FF20
&arr =0X0022FF20
max =0X004012F0
&max =0X004012F0
*arr =0X00000001
*(&arr) =0X0022FF20
*max =0X004012F0
*(&max) =0X004012F0
arr+1 =0X0022FF24
&arr+1 =0X0022FF34
max+1 =0X004012F1
&max+1 =0X004012F1
都在代码里。