数组给指向数组的指针赋值和给指向数组的指针赋值问题

Zhngbn斌 2017-12-22 05:18:13
p指向一个数组
b[j][i]=*(*(p+i)+j);
*(*(p+i)+j)=b[i][j];
为什么第一个是error C2100: illegal indirection
第二个是error C2100: illegal indirection和left operand must be l-value
需要怎么改
...全文
1025 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhngbn斌 2017-12-23
  • 打赏
  • 举报
回复
题目:将一个3×3的矩阵转置,用一函数实现之。在主函数中用scanf函数输入一下矩阵元素:在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中枢出已转置的矩阵(用指针实现)。 一下是自己的代码 #include<stdio.h> int main() { void T(int *p); int a[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",*(a+i)+j); T(*a); for(i=0;i<3;i++) for(j=0;j<3;j++) printf("%d", *(*(a+i)+j) ); } void T(int *p) { int b[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) *(*(b+j)+i)=*(*(p+i)+j); for(i=0;i<3;i++) for(j=0;j<3;j++) *(*(p+i)+j)=b[i][j]; } 出现一下问题 *(*(b+j)+i)=*(*(p+i)+j); error C2100: illegal indirection *(*(p+i)+j)=b[i][j]; error C2100: illegal indirection和error C2106: '=' : left operand must be l-value 这是为什么呢,要怎么改正?
Zhngbn斌 2017-12-23
  • 打赏
  • 举报
回复
指针变量p指向一个二维数组,b也是一个二维数组
自信男孩 2017-12-23
  • 打赏
  • 举报
回复
引用 4 楼 weixin_40519528 的回复:
题目:将一个3×3的矩阵转置,用一函数实现之。在主函数中用scanf函数输入一下矩阵元素:在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中枢出已转置的矩阵(用指针实现)。 一下是自己的代码 #include<stdio.h> int main() { void T(int *p); int a[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",*(a+i)+j); T(*a); for(i=0;i<3;i++) for(j=0;j<3;j++) printf("%d", *(*(a+i)+j) ); } void T(int *p) { int b[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) *(*(b+j)+i)=*(*(p+i)+j); for(i=0;i<3;i++) for(j=0;j<3;j++) *(*(p+i)+j)=b[i][j]; } 出现一下问题 *(*(b+j)+i)=*(*(p+i)+j); error C2100: illegal indirection *(*(p+i)+j)=b[i][j]; error C2100: illegal indirection和error C2106: '=' : left operand must be l-value 这是为什么呢,要怎么改正?
p不是指向一个二维数组哦,而是一个一维数组。 可以改一下形参,如下:
#include<stdio.h>

void T(int (*p)[3]);
int main()
{
	int a[3][3],i,j;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			scanf("%d",*(a+i)+j);
	T(a);
	for(i=0;i<3;i++) {
		for(j=0;j<3;j++)
			printf("%d ", *(*(a+i)+j) );
		putchar(10);
	}
}

void T(int (*p)[3])
{
	int b[3][3],i,j;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			*(*(b+j)+i)=*(*(p+i)+j);

	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			*(*(p+i)+j)=b[i][j];
}
参考一下吧
xskxzr 2017-12-23
  • 打赏
  • 举报
回复
p是int*,不是二维数组。
自信男孩 2017-12-22
  • 打赏
  • 举报
回复
信息提供的不足,p指向的是一个什么样的数组,二维数组,还是什么? 建议提供更多的信息;
赵4老师 2017-12-22
  • 打赏
  • 举报
回复
仅供参考:
//char (*(*x[3])())[5];//x是什么类型的变量?
//
//分析C语言声明,关键是搞清楚这个变量是个什么东西(函数、指针、数组),
//是函数那么剩下的就是他的参数和返回值,
//是指针那剩下部分是说明他指向什么,
//是数组剩下的部分就是说明数组的成员是什么类型。
//解析C语言声明规则:
//从左侧第一个标识符开始,按照优先级进行结合。*表示是..的指针,const表示只读的,volatile表示可变的,[]表示是数组,()表示是函数。
//
//x和[3]结合说明是一个大小为3的数组,该数组的每个元素为一类指针,该类指针指向一类函数,该类函数无参数,返回一类指针,该类指针指向一个大小为5的char型数组
#include <stdio.h>
#include <typeinfo.h>
char num[5];
char (*x00())[5] {
    return #
}
int main() {
    char (*(*x[3])())[5];//是个数组,大小为3
    char (*(*x0  )())[5];//数组的元素,是个函数指针
    char (*( x00 )())[5];//函数原型,参数为空,返回值为指针
    char (*  x000   )[5];//返回值

    x0 = x00;
    x[0] = x0;
    x[1] = x0;
    x[2] = x0;
    printf("typeid(x).name() is %s\n",typeid(x).name());
    return 0;
}
//typeid(x).name() is char (* (__cdecl**)(void))[5]

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧