如果声明指针和C char
数组,则:
char arr[100];
char *ptr;
我说的是正确的
*ptr
与ptr[]
相同,换句话说,它是指向动态数组中第一个元素的指针?
然后,如果我要遍历一个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
}
}
答案 0 :(得分:1)
我说的是否正确
*ptr
与ptr[]
相同,换句话说,它是指向动态数组中第一个元素的指针?
没有。 Arrays are not pointers。
当您声明char *ptr;
时,则表示ptr
的类型为pointer to char
。但是当您将其声明为char ptr[n];
时,则表示ptr
是n
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
}
}
这是否适合您的计划?