数组访问,指针混乱

时间:2013-01-10 03:41:35

标签: c pointers

我有一些继承的代码和一个以字符数组作为参数的函数。

typedef char myString[256];

void MyFunc(myString param)
{
  int i;

  for (i = 0; i < 256; i++)
  {
     if (param[i] ....

我想提高效率,并将指针传递给char数组:

void MyFunc(myString *param)
{
  int i;

  for (i = 0; i < 256; i++)
  {
     if (*param[i] <========= Thsi is wrong

当我尝试引用数组元素时,我得到了错误的值,所以显然我的指针解除引用有问题。我用C编码已经有一段时间了,所以我看不出明显的错误。

有人可以指出吗?

4 个答案:

答案 0 :(得分:6)

你可能不想通过指针传递它;当你在参数中使用类型时,无论如何它都会变成一个指针,而第二级间接效率会降低。

如果您使用指向数组的&#39;指针&#39;符号,然后你需要括号来获得正确的优先权:

if ((*param)[i] ...)
    ...

答案 1 :(得分:2)

myString *是指向具有256个元素的char数组的指针,即param具有类型

char (*)[256]

所以你必须首先取消引用param,然后访问它的元素。

  1. 通过取消引用param,您获得了数组param的第一个元素的地址。
  2. (*param)[i]则是所讨论数组的第i个元素。

答案 2 :(得分:1)

//这没关系:数组可以被视为“char *”,反之亦然     char myString [256];

void MyFunc(char * param)
{
  int i;

  for (i = 0; i < 256; i++)
  {
     if (param[i] ...
  

问:我想提高效率,并将指针传递给   char数组

答:无论你传递“param []”还是“* param”,效率绝对没有区别

for (i = 0; i < 256; i++)
  {
     if (*param[i] <==== <========= Thsi is wrong
是的 - 这是错的。同样,“param[]”和“*param”应该以同样的方式对待。

同样有或没有“typedef”:)

最后,这是与typedef相同的程序:

typedef char myString[256];

void MyFunc(myString param) 
// This is treated as "MyFunc(char param[256])" 
// It is *identical* to "MyFunc(char * param)"
{
  int i;

  for (i = 0; i < 256; i++)
  {
     if (param[i] ....

答案 3 :(得分:0)

使用如下:

if (*(param +i) ...)
...
相关问题