《C和指针》第六章 指针

《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]+1cp
*(cp+1)[cp+1]cp+1
++cpcp+1cp+1
cp++cpcp+1
*++cp[cp+1]cp+1
*cp++[cp]cp+1
++*cp[cp]+1cp
(*cp)++[cp]+1cp
++*cp++[cp]+1cp+1
++*++cp[cp+1]+1cp+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;
		};
}

在这里插入图片描述

指针运算

指针和一个整数执行算数运算
根据指针所指向的类型大小,调整整数值与”合适的大小“相乘
指针-指针
两指针指向同一数组,差值运算结果与数据类型无关
关系运算
两指针指向同一数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值