关于指针和C数组的问题
如果声明指针和C关于指针和C数组的问题,c,arrays,pointers,C,Arrays,Pointers,如果声明指针和Cchar数组,则: char arr[100]; char *ptr; 我这样说对吗 *ptr与ptr[]相同,换句话说,它是指向动态数组中第一个元素的指针 然后,如果我在一个NULL终止的char数组中循环,那么 printf("Enter a string"); gets(arr); char *ptr = someCharString; int increment; while(*ptr++ != '\0') increment++; 因此,increment
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++;
因此,increment现在给出字符串的长度(假设它是NULL
终止的)。我想这就是strlen的工作原理
那么这是否与说ptr[length\u of\u char\u 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
}
}
for(int i=0;i
我说得对吗*ptr
与ptr[]
相同,换句话说,它是指向动态数组中第一个元素的指针
否…当您声明
char*ptr
则表示ptr
是指向char的指针类型。但是当你声明它为charptr[n]
则表示ptr
是n
char
s的数组。只有当它们被声明为函数的参数时,这两个函数才是等价的
我强烈建议您阅读。类似以下内容:
char *temp_ptr;
temp_ptr = ptr;
for(int i = 0;i < increment;i++){
if(*ptr++ = 'a'){
ptr = temp_ptr
//Do stuff
}
}
char*temp\u ptr;
温度=温度;
对于(int i=0;i
这是您的程序可以接受的解决方案吗?char*不等于数组的名称。您可以将指针用作数组(例如ptr[0]可以),但不能将数组用作指针(例如,数组++为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;
}
}
char*ptr=someCharString;
char*ptr_bak=ptr;
对于(int i=0;i
您可以将第一个元素的地址保存在其他变量中代码>你的意思是char*ptr=arr代码>不要使用get()
gets()
usage是一个有保证的缓冲区溢出漏洞。改用fgets()
。