今天发现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
都在代码里。