如何将一个二维数组赋值给一个指针数组
如果有一个已知的定义好的二维数组arr,我想要创建一个指针数组用来传递这个二维数组,那么在申明了“char *ptr;”之后应该怎么办?我尝试了直接让“ptr=arr”好像不太行,小白求助各位大佬帮忙解答疑惑!
char **p;
p = arr;
这样试试 小甲鱼的铁粉 发表于 2020-11-2 20:57
这样试试
好像还是不太行 提示了warning: assignment from incompatible pointer type 给你一个数组,你看懂了,你的问题就解决了,我就不改我程序里的变量名称了
#include<stdio.h>
int main()
{
int i,j;
int *p,*q,*r,(*t);
int a = {{1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23}};
p = &a;
q = a;
r = *a;
t = a;
// p = &a 的输出模式
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 4; ++j)
{
printf("%2d ", *p++);// 与 *(p + i * 4 + j) 等价
}
printf("\n");
}
printf("\n");
// q = a 的输出模式
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
printf("%2d ",*q++);// 与 *(q + i * 4 + j) 等价
}
printf("\n");
}
printf("\n");
// r = *a 的输出模式
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
printf("%2d ",*r++);// 与 *(r + i * 4 + j) 等价
}
printf("\n");
}
printf("\n");
// t = a 的输出模式
for (i = 0; i < 3;i++)
{
for (j = 0; j < 4;j++)
{
printf("%2d ", *(*(t + i) + j));
}
printf("\n");
}
printf("\n");
}
空羊羊 发表于 2020-11-2 21:01
好像还是不太行 提示了warning: assignment from incompatible pointer type
我也不会了{:10_250:} 风过无痕1989 发表于 2020-11-2 21:01
给你一个数组,你看懂了,你的问题就解决了,我就不改我程序里的变量名称了
谢谢大佬,但是我想要的效果是把这个二维数组传递给指针数组后,将指针数组作为函数的参数传递后,能够直接在函数内部通过对这个指针数组进行索引,直接得到其中的指针,也就是本来二维数组的每一行。要是用数组指针的话我感觉好像不能实现? 小甲鱼的铁粉 发表于 2020-11-2 21:05
我也不会了
{:10_250:} 空羊羊 发表于 2020-11-2 21:11
谢谢大佬,但是我想要的效果是把这个二维数组传递给指针数组后,将指针数组作为函数的参数传递后,能够直 ...
四种定义指针的模式,知道了怎么定义,也知道了该种模式下它的输出,利用指针进行地址传递,你不会吗? 以下是以第四种模式定义函数,并通过指针的引用来传递参数的实例(这种定义模式,用得非常地广泛)
#include<stdio.h>
int main()
{
int print(int(*t), int n); // 定义一个输出函数
int(*t);
int a = { { 1, 3, 5, 7 },{ 9, 11, 13, 15 },{ 17, 19, 21, 23 } };
t = a;
print(t,3); // 将数组的首地址及长度作为实参传递给调用函数
return 0;
}
int print(int(*t), int n)
{
int i, j;
for (i = 0; i < n;i++)
{
for (j = 0; j < 4;j++)
{
printf("%2d ", *(*(t + i) + j));
}
printf("\n");
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <string.h>
void output(char *p[])
{
int i = 0;
for(i = 0; i<5; i++)
{
printf("%s\n",p);
}
}
void output1(char *p[])
{
int i = 0;
int j = 0;
for(i=0; i<5 ; i ++)
{
for(j=0; j<strlen(p) ; j++)
{
printf("%c",p);
}
printf("\n");
}
}
int main()
{
char arr;
char *p;
int i = 0;
for(i = 0 ; i < 5 ; i++)
{
p = arr;
scanf("%s",p);
}
output(p);
output1(p);
return 0;
} xieglt 发表于 2020-11-2 22:28
他一个函数都搞不明白,你还弄两个,他不晕才怪 风过无痕1989 发表于 2020-11-2 21:54
以下是以第四种模式定义函数,并通过指针的引用来传递参数的实例(这种定义模式,用得非常地广泛)
谢谢大佬,明白了
页:
[1]