请查看以下代码并告诉我***ptr
位于何处?
即***ptr
实际上位于ptr[0][0][0]
的感觉
我错了吗 ?以下是指针的3d表示。我试图分配一些字符,后来我想测试***ptr
的索引是什么?将等待
#include<stdio.h>
#include<conio.h>
#define row 5
#define rw 3
#define col 10
char ***ptr;
int i,j,k;
void main()
{
clrscr();
ptr=(char *)malloc(row*sizeof(char *));
for(i=0;i<row;i++)
{
*(ptr+row)=(char *)malloc(rw*sizeof(char *));
printf("\t:\n");
for(j=0;j<rw;j++)
{
*(*(ptr+row)+rw)=(char *)malloc(col*sizeof(char *));
if(i==0 && j==0)
{ // *(*(ptr+row)+rw)="kabul";
**ptr="zzz";
}
else
*(*(ptr+row)+rw)="abul";
printf("\taddress=%d %d%d = %s\n",((ptr+row)+rw),i,j,*(*(ptr+row)+rw));
}
printf("\n");
}
printf("%c %d",***ptr,ptr);
getch();
}
答案 0 :(得分:2)
首先,我发现你的编码风格极难阅读。
回答你的问题,是的,ptr[0][0][0]
是***ptr
的同义词。那是因为a[b]
的定义等于*(a+b)
,所以ptr[0]
等于*ptr
等等。
说,这是我的代码版本:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define row 5
#define rw 3
#define col 10
char ***ptr;
int main()
{
int i, j;
ptr = (char***)malloc(row * sizeof(char **));
for(i = 0; i < row; i++)
{
ptr[i]= (char**)malloc(rw * sizeof(char *));
printf("\t:\n");
for(j = 0; j < rw; j++)
{
ptr[i][j] = (char*)malloc(col * sizeof(char));
if (i == 0 && j == 0)
{
strcpy(ptr[i][j], "zzz");
}
else
{
strcpy(ptr[i][j], "abul");
}
printf("\taddress=%p %d,%d = %s\n", ptr[i][j], i, j, ptr[i][j]);
}
printf("\n");
}
return;
}
请注意以下更改:
void main
。扔掉任何印刷它的书。malloc
的参数通常是元素的数量乘以元素的大小。特别注意您打算使用的真实类型。malloc
的返回通常会转换为指向该元素类型的类型。i
和j
,而不是row
和rw
。*(ptr + x)
的东西?这就是我们使用ptr[x]
语法的原因。strcpy
填充字符串,但如果不解释问题则很难说。printf
指针,请使用%p
。malloc
,请加入<stdlib.h>
。i
,j
)为全局变量,尤其是循环变量。 PS。 <conio.h>
?真?你还在使用Turbo-C还是什么?