《C和指针》第六章 指针
NULL指针
NULL指针的概念是非常有用的,因为它给了你一种方法,表示某个特定的指针目前并未指向任何东西。要使一个指针变量为NULL,可以给它赋一个零值。就机器内部而言,NULL指针的实际值可能与此不同,编译器将负责零值和内部值之间的翻译转换。
指针的指针
int a=12;
int *b=&a;
int **c=&b;
指针表达式
char ch='a';
char *cp=&ch;
左值表达式 | 表达式值 | 指针 |
---|---|---|
*cp | [cp] | cp |
*cp + 1 | [cp]+1 | cp |
*(cp+1) | [cp+1] | cp+1 |
++cp | cp+1 | cp+1 |
cp++ | cp | cp+1 |
*++cp | [cp+1] | cp+1 |
*cp++ | [cp] | cp+1 |
++*cp | [cp]+1 | cp |
(*cp)++ | [cp]+1 | cp |
++*cp++ | [cp]+1 | cp+1 |
++*++cp | [cp+1]+1 | cp+1 |
1.单目运算(*,++,–)优先级高于双目运算(+1,-1)
2.单目运算(++,–)优先级高于单目运算(*)
3.单目运算(后缀++,–)优先级高于单目运算(前缀++,–)
实例
字符串长度
#include<iostream>
int main(){
using namespace std;
char a[10] = "haha";
char* str = &a[0];
int n = 0;
while (*str++ != '\0')
n++;
cout << "字符串" << a << " 含有字符数:" << n << endl;*/
}
给定一个指向以NULL结尾的指针列表的指针,
在列表的字符串中查找一个特定字符
#include<iostream>
void showexist(char** ppoint, char value);
int main() {
using namespace std;
//字符串
char a[10] = "China";
char b[10] = "American";
char c[10] = "Japan";
char d[10] = "Germany";
char e[10] = "British";
char f[10] = "French";
char g[10] = "Russia";
//指针列表
char* strlist[] = { &a[0],&b[0],&c[0],&d[0],&e[0],&f[0],&g[0],NULL };
//指针列表指针
char** ppoint = &strlist[0];
//输入要查询的字符
char value;
cout << "请输入查询是否存在的字符:";
cin >> value;
cout << "列表中内容对应字符存在情况(存在对应位为1,不存在对应位为0):" << endl;
showexist(ppoint, value);
}
void showexist(char **ppoint, char value) {
char *string = *ppoint;
while ((string = *ppoint++) != NULL){
std::cout << string << ":" << std::endl;
while (*string != '\0')
if (*string++ == value)
std::cout << 1;
else
std::cout << 0;
std::cout << std::endl;
};
}
指针运算
指针和一个整数执行算数运算
根据指针所指向的类型大小,调整整数值与”合适的大小“相乘
指针-指针
两指针指向同一数组,差值运算结果与数据类型无关
关系运算
两指针指向同一数组