- 论坛徽章:
- 0
|
10可用积分
- 关于数组指针的问题
- #include <stdio.h>
- #include <stdlib.h>
- static void print_string(char (*a)[]);
- int main(void)
- {
- char str[10] = "12345678";
- char (*a)[10] = &str;//注意:两个[]内的数值要相等
- printf("%u, %u, %u, %u\n", a, a[0], &a[0], &a[0][0]);
- print_string(a);
- exit(0);
- }
- static void print_string(char (*a)[])
- {
- printf("1: %s\n", a);
- //printf("2: %s\n", a[0]);
- //printf("3 %s\n", &a[0]);
- //printf("4: %s\n", &a[0][0]);
- }
复制代码
其中:&str表示数组str[]的地址,所以用数组指针a指向它。
所以在这个程序中:
a表示数组str[]的地址
a[0]即*(a+0)表示数组str[]第一个元素的地址,也就是&a[0][0]
同理&a[0]和a一样,表示数组str[]的地址,
所以a, a[0],&a[0], &a[0][0]它们4个的值是一样的。
不明白为什么只有第一个printf("1: %s\n", a);可以正确执行呢?
而其它3条却无法通过编译
static void print_string(char (*a)[])
{
printf("1: %s\n", a);
//printf("2: %s\n", a[0]);
//printf("3 %s\n", &a[0]);
//printf("4: %s\n", &a[0][0]); |
|