0

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

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

4 回答 4

6

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

如果您确实使用“指向数组的指针”表示法,那么您需要括号来获得正确的优先级:

if ((*param)[i] ...)
    ...
于 2013-01-10T03:44:28.967 回答
2

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

char (*)[256]

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

  1. 通过取消引用参数,你得到了数组param指向的第一个元素的地址。
  2. (*param)[i]然后是相关数组的第 i 个元素。
于 2013-01-10T03:53:00.183 回答
1

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

void MyFunc(char * param)
{
  int i;

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

问:我想让它更高效,并传递一个指向 char 数组的指针

A:无论传递“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] ....
于 2013-01-10T03:49:26.493 回答
0

使用如下:

if (*(param +i) ...)
...
于 2013-01-10T05:20:55.560 回答