C++ 指针语法和增量 #包括 #包括 使用名称空间std; 无效反向(字符*str){ char*end=str; char-tmp; 如果(str){ 这些都是相当标准的C编程习惯用法 不,事实上,if(str).等同于if(str!=NULL). C字符串以null结尾,这意味着“Hello”在内存中表示为字符数组{'H','e','l','l','o','\0'}。与指针一样,0或null值在逻辑表达式中被视为false。因此while(*end)…只要结束未达到空字符,则将在循环时执行的主体 不适用 正确-这将前进到字符串中的下一个字符或null终止符 这是反向算法。在第一个循环之后,end指向字符串末尾的一个,而str指向开始。现在我们将这两个指针指向彼此,交换字符
这些都是相当标准的C编程习惯用法C++ 指针语法和增量 #包括 #包括 使用名称空间std; 无效反向(字符*str){ char*end=str; char-tmp; 如果(str){ 这些都是相当标准的C编程习惯用法 不,事实上,if(str).等同于if(str!=NULL). C字符串以null结尾,这意味着“Hello”在内存中表示为字符数组{'H','e','l','l','o','\0'}。与指针一样,0或null值在逻辑表达式中被视为false。因此while(*end)…只要结束未达到空字符,则将在循环时执行的主体 不适用 正确-这将前进到字符串中的下一个字符或null终止符 这是反向算法。在第一个循环之后,end指向字符串末尾的一个,而str指向开始。现在我们将这两个指针指向彼此,交换字符,c++,string,pointers,C++,String,Pointers,这些都是相当标准的C编程习惯用法 不,事实上,if(str).等同于if(str!=NULL). C字符串以null结尾,这意味着“Hello”在内存中表示为字符数组{'H','e','l','l','o','\0'}。与指针一样,0或null值在逻辑表达式中被视为false。因此while(*end)…只要结束未达到空字符,则将在循环时执行的主体 不适用 正确-这将前进到字符串中的下一个字符或null终止符 这是反向算法。在第一个循环之后,end指向字符串末尾的一个,而str指向开始。现在我们
if(str).
等同于if(str!=NULL).
{'H','e','l','l','o','\0'}
。与指针一样,0或null值在逻辑表达式中被视为false
。因此while(*end)…只要结束
未达到空字符,则将在
循环时执行的主体
end
指向字符串末尾的一个,而str
指向开始。现在我们将这两个指针指向彼此,交换字符这些都是相当标准的C编程习惯用法
if(str).
等同于if(str!=NULL).
{'H','e','l','l','o','\0'}
。与指针一样,0或null值在逻辑表达式中被视为false
。因此while(*end)…只要结束
未达到空字符,则将在
循环时执行的主体
end
指向字符串末尾的一个,而str
指向开始。现在我们将这两个指针指向彼此,交换字符这些都是相当标准的C编程习惯用法
if(str).
等同于if(str!=NULL).
{'H','e','l','l','o','\0'}
。与指针一样,0或null值在逻辑表达式中被视为false
。因此while(*end)…只要结束
未达到空字符,则将在
循环时执行的主体
end
指向字符串末尾的一个,而str
指向开始。现在我们将这两个指针指向彼此,交换字符if(str){}
是否等同于if(str==NULL){}
否,if(str){}
等同于if(str!=NULL){}
while(*end){}
是什么意思?它到底在做什么
由于end
的类型是char*
,while(*end){}
相当于while(*end!='\0')
。循环对输入字符串的所有字符执行。当到达字符串的末尾时,循环停止
假设if(str){}
是与if(str==NULL){}
这是不正确的。我没有读这段的其余部分,因为你一开始的陈述不正确
代码++end
的指针运算正确吗?所以每次递增,地址都会移动到它旁边的地址
排序。end
的值递增。它指向在操作之前它用来指向的下一个对象
当(strwhile
循环中,end
从str
开始递增,直到到达字符串的末尾。在此循环中,end
递减,直到到达字符串的开头。当end
到达str
时,while
语句的条件计算结果为false
则循环中断
更新
关于
您将向函数传递什么来使str=NULL
你只要打个电话就可以了
#include <iostream>
#include <cstdlib>
using namespace std;
void reverse(char* str){
char *end = str;
char tmp;
if(str){
cout << "hello" << endl;
while(*end){
cout << end << endl;
++end;
}
--end;
while (str < end){
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}
int main(){
char str[] = "helloyouarefunny";
string input = str;
reverse(str);
for(int i = 0; i < input.length(); i++) {
cout << str[i];
}
}
我尝试执行char str[]=NULL;
str
是一个字符数组。可以使用以下两种方法初始化它:
reverse(NULL);
请注意,在第二个方法中存在一个显式指定的空字符
您不能将类型为array ofchar
s的变量初始化为NULL。该语言不允许这样做。您可以将指针初始化为NULL,但不能初始化数组
// This is what you have done.
char str[] = "helloyouarefunny";
// Another, more tedious way:
char str[] = {'h','e','l','l','o','y','o','u','a','r','e','f','u','n','n','y', '\0'};
if(str){}
是否等同于if(str==NULL){}
否,if(str){
char* s1 = NULL; // OK
reverse(s1); // Call the function
s1 = malloc(10); // Allocate memory for the pointer.
strcpy(s1, "test") // Put some content in the allocated memory
reverse(s1); // Call the function, this time with some content.
while (str < end){
tmp = *str;
*(str++) = *end;
*(end--) = tmp;
}