废话不说了,先看看常规的指针写法:
char *str = "helloworld";
int array[3] = {1, 2, 3}, *ptr = array;
对字符指针来说,可以直接赋值,这是比较爽的一件事。可是整型或浮点型指针却不能直接赋初值,还得先定义一个数组,再让指针指向数组,这样就难免显得繁琐了。
这里说下任意指针赋初值的一个写法:
char *str = (char []){"helloworld"};
const char *sstr = (const char []){"helloworld"};
int *ptr = (int []){1, 2, 3, 4};
float *fptr = (float []){1.1, 2.2, 3.3, 4.4};
在面向对象的语言如C++、Python、Java中,可以传递匿名对象作为参数。在有了上面的那种写法后,C语言也类似有了C++、Java的影子,例如:
//void sort(int *p, int len)
sort((int []){3, 7, 2, 9, 1, 4}, 6);
对结构体也一样的用法,如:
struct book
{
char name[16];
float price;
};
void print_bookinfo(struct book *bk)
{
printf("name: %s\nprice: %.2f\n", bk->name, bk->price);
}
print_bookinfo(&(struct book){"C-Programming", 60.0});