我有一些继承的代码和一个以字符数组作为参数的函数。
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编码已经有一段时间了,所以我看不出明显的错误。
有人可以指出吗?
答案 0 :(得分:6)
你可能不想通过指针传递它;当你在参数中使用类型时,无论如何它都会变成一个指针,而第二级间接效率会降低。
如果您使用指向数组的&#39;指针&#39;符号,然后你需要括号来获得正确的优先权:
if ((*param)[i] ...)
...
答案 1 :(得分:2)
myString *
是指向具有256个元素的char数组的指针,即param
具有类型
char (*)[256]
所以你必须首先取消引用param
,然后访问它的元素。
param
的第一个元素的地址。(*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) ...)
...