0
int main()
{
 unsigned char a[3];
 unsigned char (*p)[3]=NULL;
 unsigned char *q=NULL;
 int i = 0;
 a[0]=0;
 a[1]=1;
 a[2]=2;
 p=&a;
 for(i=0;i<3;i++){
   if((*p)[3] == a[3]){
     printf("*p[%d]:%d a[%d]:%d",i,(*p)[3],i,a[3]);
   }
 }
}

o/p:
*p[0]:0 a[0]:0*p[1]:0 a[1]:0*p[2]:0 a[2]:0
Exited: ExitFailure 14

我想将一个大小为 3 的数组复制到一个指针并进行比较。我写了一个示例程序。但我得到一个错误值。我使用在线 c 编译器运行它。(codepad.org) 请帮助我找出我的错误。

4

2 回答 2

4

你的变量p是一个数组,而不是一个指针。你不能重新分配一个数组来指向其他地方,所以这条线

p = &a;

无效。

此外,您似乎知道从 0 开始的 C 索引,因此使用索引[3]对大小为 3 的数组进行比较是无效的。

此外,在您的比较循环中,您实际上并没有使用ito 索引,而是始终使用无效的常量 index 进行比较[3]

从您的代码中不是很清楚(q例如,未使用),但听起来好像您想做类似的事情:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned char a[3];
unsigned char *p;

p = malloc(sizeof a);
if(p != NULL) /* If allocation succeeded, p is valid. */
{
  int i;

  memcpy(p, a, sizeof a);
  for(i = 0; i < sizeof a; ++i)
  {
    if(p[i] == a[i])
      printf("p[%d]:%d a[%d]:%d\n", i, p[i], i, a[i]);
  }
  free(p);
}

当然,这将始终打印所有数字,因为memcpy()永远不会复制内存。:)

于 2012-07-20T06:56:38.353 回答
1

在这里,您已将main 函数的返回类型声明为int,但您没有从中返回任何内容。所以返回任何数值(如 1)或使主函数的返回类型为void

于 2012-07-20T07:32:14.130 回答