关于指针和C数组的问题

时间:2014-03-17 09:48:29

标签: c arrays pointers

如果声明指针和C char数组,则:

char arr[100];
char *ptr;

我说的是正确的

*ptrptr[]相同,换句话说,它是指向动态数组中第一个元素的指针?

然后,如果我要遍历一个NULL终止的char数组,那么

printf("Enter a string");
gets(arr);
char *ptr = someCharString;
int increment;
while(*ptr++ != '\0')
     increment++;

所以增量现在给出了字符串的长度(假设它是NULL终止的)。我假设这是strlen的工作原理..

这就像说ptr[length_of_char_string]

一样

如何将*ptr重置回ptr[0],以便我可以循环浏览*ptr,因为我的长度如下,

for(int i = 0;i < increment;i++){
   if(*ptr++ = 'a'){//Need ptr to start at the first element again
   //Do stuff
   }
}

3 个答案:

答案 0 :(得分:1)

  

我说的是否正确   *ptrptr[]相同,换句话说,它是指向动态数组中第一个元素的指针?

没有。 Arrays are not pointers
当您声明char *ptr;时,则表示ptr的类型为pointer to char。但是当您将其声明为char ptr[n];时,则表示ptrn char的数组。只有当它们被声明为函数的参数时,上述两者才是等价的。

我强烈建议您阅读c-faq: 6. Pointers and Arrays

答案 1 :(得分:1)

char *不等于数组的名称。你可以使用指针作为数组(例如ptr [0]就可以了),但你不能使用数组作为指针(例如,array ++是NG)。

您可以为ptr。

定义克隆
char *ptr = someCharString;
char *ptr_bak = ptr;

for(int i = 0; i < increment; i++){
   if(*ptr++ = 'a'){//Need ptr to start at the first element again
       ptr = ptr_bak;
   }
}

答案 2 :(得分:0)

类似的东西:

char *temp_ptr;

temp_ptr = ptr;

for(int i = 0;i < increment;i++){
    if(*ptr++ = 'a'){
       ptr = temp_ptr
       //Do stuff
    }
}

这是否适合您的计划?