请问这个指针数组赋值给数组指针怎么理解
int main(){
char *array = {"FishC", "Five", "Star", "Good", "WoW"};
char *(*p) = &array;
} 1.array是指针数组,里面的每一项存的内容都是一个字符串的地址,比如array的内容是字符串"FishC"的首地址,(从下面代码运行结果可以看出来)
2. char *array 也许写成 char* array 更容易理解 类型: char*数据结构:数组
3. char *(*p) = &array 相当于 char* array 的 array 用 *p替代 说明 p是指针 p的内容是数组array的首地址,(从下面代码运行结果可以看出来)
#include<stdio.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "WoW"};
char *(*p) = &array;
printf("array的内容: %d\n",array);
printf("array指向的内容: %s\n",array);
printf("array的地址(与array数组的首地址): %d\n",&array);
printf("p的内容(即array数组的首地址): %d\n",p);
printf("array的内容: %d\n",(*p));
printf("array指向的内容: %s\n",(*p));
printf("array的地址(与array数组的首地址): %d\n",&(*p));
return 0;
} jhanker 发表于 2021-9-15 09:43
1.array是指针数组,里面的每一项存的内容都是一个字符串的地址,比如array的内容是字符串"FishC"的首 ...
*p本身不就是一个指向数组的指针吗,不能直接把array的数组地址直接赋值给他吗...我就不懂为什么定义时要再加一个* array地址,array,&array 表示的是同一个地址,但他们的含义不一样,而编译器是要检查类型是否一致的,&array表示数组的第一项的地址,array编译器代表的也是第一项的地址,而&array表示整个数组五项的一起的首地址。
钱看代码
#include<stdio.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "WoW"};
char *(*p) = &array;
printf("array的内容: %d\n",array);
printf("array指向的内容: %s\n",array);
printf("array的地址(与array数组的首地址): %d\n",&array);
printf("p的内容(即array数组的首地址): %d\n",p);
printf("array的内容: %d\n",(*p));
printf("array指向的内容: %s\n",(*p));
printf("array的地址(与array数组的首地址): %d\n",&(*p));
printf(": array第一项的地址%d,array第二项的地址%d\n", array, array+1);
printf(": array的地址%d,array数组后面的地址%d\n", &array, &array+1);
return 0;
}
运行后看看地址的偏移量 看看运行结果,点击图片放大后能看清楚 本帖最后由 黄jz 于 2021-9-15 12:47 编辑
jhanker 发表于 2021-9-15 10:35
array地址,array,&array 表示的是同一个地址,但他们的含义不一样,而编译器是要检查类型是否一致的, ...
我看小甲鱼教学视频里是定义了一个数组temp然后把数组的整个数组地址赋值给了(*p)=&temp,并不是*(*p),我就是不明白为什么还要在前面多加一个*... 黄jz 发表于 2021-9-15 12:45
我看小甲鱼教学视频里是定义了一个数组temp然后把数组的整个数组地址赋值给了(*p)=&temp,并不是* ...
他的视频我没看过 在他视屏里 temp的类型是 char* temp还是 char temp 本帖最后由 黄jz 于 2021-9-15 13:00 编辑
jhanker 发表于 2021-9-15 12:56
他的视频我没看过 在他视屏里 temp的类型是 char* temp还是 char temp
int temp 黄jz 发表于 2021-9-15 12:59
char temp
所以和你问的问题是不一样的 本帖最后由 黄jz 于 2021-9-15 13:09 编辑
jhanker 发表于 2021-9-15 13:01
所以和你问的问题是不一样的
他是 int temp,取了(*p)=&temp,我想的是指针数组也是数组,为什么不能直接取数组的总体地址然后赋值给(*p)而是赋值给*(*p) 黄jz 发表于 2021-9-15 13:07
他是 int temp,取了(*p)=&temp,我想的是指针数组也是数组,为什么不能直接取数组的总体地址 ...
int temp;
int(*p)=&temp;
这样是一边定义一边赋值是可以的
其实是
int(*p);
p=&temp;
至于书写怎么写是规定的,你要知道其中的含义就行了 ! jhanker 发表于 2021-9-15 13:23
int temp;
int(*p)=&temp;
这样是一边定义一边赋值是可以的
为什么指针数组就不行... 黄jz 发表于 2021-9-15 13:45
为什么指针数组就不行...
指针数组也可以啊
int*temp;
int*(*p)=&temp;
这样是一边定义一边赋值是可以的
其实是
int* (*p);
p=&temp;
jhanker 发表于 2021-9-15 14:41
指针数组也可以啊
int*temp;
int*(*p)=&temp;
我昨天试了一下直接报错... 黄jz 发表于 2021-9-15 15:18
我昨天试了一下直接报错...
应该是你打错代码了,试试下面的代码:
#include <stdio.h>
int main()
{
int a=0,b=1,c=2,d=3,e=4;
int* temp={&a,&b,&c,&d,&e};
int*(*p)=&temp;
int*(*pa);
pa=&temp;
printf("a的值是:%d\n", *(*p));
printf("e的值是:%d\n", *(*pa));
return 0;
} jhanker 发表于 2021-9-15 15:28
应该是你打错代码了,试试下面的代码:
#include <stdio.h>
int main()
{
char *array={"Fishc","Five","Star","Good","WoW"};
char (*p)=&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;
}
下面是错误:
C:\Users\DRD\Desktop\c\未命名41.cpp In function 'int main()':
5 52 C:\Users\DRD\Desktop\c\未命名41.cpp deprecated conversion from string constant to 'char*' [-Wwrite-strings]
5 52 C:\Users\DRD\Desktop\c\未命名41.cpp deprecated conversion from string constant to 'char*' [-Wwrite-strings]
5 52 C:\Users\DRD\Desktop\c\未命名41.cpp deprecated conversion from string constant to 'char*' [-Wwrite-strings]
5 52 C:\Users\DRD\Desktop\c\未命名41.cpp deprecated conversion from string constant to 'char*' [-Wwrite-strings]
5 52 C:\Users\DRD\Desktop\c\未命名41.cpp deprecated conversion from string constant to 'char*' [-Wwrite-strings]
6 16 C:\Users\DRD\Desktop\c\未命名41.cpp cannot convert 'char* (*)' to 'char (*)' in initialization
10 22 C:\Users\DRD\Desktop\c\未命名41.cpp invalid type argument of unary '*' (have 'int')
12 27 C:\Users\DRD\Desktop\c\未命名41.cpp invalid type argument of unary '*' (have 'int')
你代码写错了
#include <stdio.h>
int main()
{
char* array={"Fishc","Five","Star","Good","WoW"};
char* (*p)=&array; //这一句你写错了不是char (*p)=&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;
}
jhanker 发表于 2021-9-15 16:54
你代码写错了
就是为啥要多加一个*号.. char* array={"Fishc","Five","Star","Good","WoW"}; //这一句有 char*
char* (*p)=&array; //这一句你写错了不是char (*p)=&array;//这一句也一样要求是char*
页:
[1]