大佬们,两个问题
第一个问题:
数组指针里存放的应该是数组的地址,但是指向二维数组时数组名不需要加&符号,这是为什么?#include <stdio.h>
int main()
{
int array[2][3] = {{0, 1, 2}, {3, 4, 5}};
[b]int (*p)[3] = array;[/b]
printf("**(p+1): %d\n", **(p+1));
printf("**(array+1): %d\n", **(array+1));
printf("array[1][0]: %d\n", array[1][0]);
printf("*(*(p+1)+2): %d\n", *(*(p+1)+2));
printf("*(*(array+1)+2): %d\n", *(*(array+1)+2));
printf("array[1][2]: %d\n", array[1][2]);
return 0;
}
第二个问题:
第23课作业做一做第一题代码:#include <stdio.h>
int main()
{
char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};
char *(*p)[5] = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; (*p)[i][j] != '\0'; j++)
{
printf("%c ", (*p)[i][j]);
}
printf("\n");
}
return 0;
}
红色部分为什么要多加一个‘ * ’,按照我自己的理解,指针数组指向的应该是整个数组,存放的是整个数组的地址,那么应该是(*p)[5]=&array;但是我试了一下会报错,
有大佬来帮忙解释一下这句语句的意思吗?
#include<stdio.h>
int main()
{
int c=1;
int d=2;
int* a=&c;
int* b=&d;
int **str[2]={&a,&b};
int **(*p)[2]=&str;
printf("%d",****p);
return 0;
}
#include<stdio.h>
int main()
{
int c=1;
int d=2;
int* a=&c;
int* b=&d;
int *str[2]={a,b};
int *(*p)[2]=&str;
printf("%d",***p);
return 0;
}
|