深入解析指针:第五章要点汇总

更新:11-07 名人轶事 我要投稿 纠错 投诉

/*a的地址被赋值为12,但是a的地址指向哪里呢?指针变量已声明但未初始化,因此无法预测它。

a的值存储在声明的地方*/

*a=12;

NULL指针

NULL 指针是一种特殊的指针变量,它不指向任何变量,其值为零。根据编译器的不同,如果访问NULL 指针,可能会触发分段错误,或者可能会访问零值

指针的指针

# includeint main(void)

{

整数a=12;

int *b=a;

int **c=b;

printf("a=%dn",a);

printf("b=%pn*b=%dn",b,*b);

printf("c=%pn",c);

printf("*c=%pn",*c);

printf("**c=%dn",**c);

}上面的代码声明了三个变量a、一个指向a的指针b、一个指向b的指针c。 c 也称为指向指针的指针。

表达式等效表达式a12ba*ba,12cb*cb,a**ca,12,*b

指针表达式

char ch="a"

字符*cp=ch;

//各种类型的表达式

//ch=cp 指向变量ch 的指针

//cp=ch 指向变量ch 的指针

//cp指针cp指针

//*cp=ch="a" 使用间接访问运算符访问指针cp

//*cp + 1="b" 使用间接访问运算符访问指针cp并加1

//*(cp+1) 指针cp加1后,进行间接访问。如果指针cp加1后的地址不存在,则出错。

//++cp前缀++首先增加其操作数的值,然后返回结果。该副本的存储位置没有明确定义,因此是非法的。

//cp++后缀++首先返回cp值的副本,然后递增cp的值。这样,表达式的值就是cp原始值的副本。

//*++cp 间接运算符作用于递增指针的副本

//++*cp首先进行间接访问操作,然后将cp指向的位置的值加1。

//(*cp)++ 使用后缀++ 运算符,并且必须添加括号。它首先执行间接访问操作。

//++*++cp 首先执行++cp,用这个来间接访问复制的值,这样就访问到了ch后面的内存位置,然后给这个位置+1

//++*cp++ 这里的后缀++优先级较高,会先执行

使用指针计算字符串长度

#includeint strlen_for(char *);

int strlen_while(char *);

int strlen_goto(char *);

int main()

{

char *str="abcde";

int 长度;

len=strlen_for(str);

printf("用于实现:%dn",len);

len=strlen_goto(str);

printf("goto 实现了:%dn",len);

len=strlen_while(str);

printf("同时实现:%dn",len);

}

int strlen_for(char *字符串)

{

int len=0;

for(;*字符串!="";字符串++)

伦++;

返回长度;

}

int strlen_while(char *字符串)

{

int len=0;

while(*string++!="")

伦++;

返回长度;

}

int strlen_goto(char *字符串)

{

int len=0;

标签:

if (*字符串!="") {

字符串++;

伦++;

转到标签;

}

返回长度;

使用指针进行字符串查找

#includeint find_char_for(char **strings,int);

int find_char_while(char **strings,int c);

int find_char_goto(char *strings[3],int c);

int main(int argc,const char *argv[])

{

整数结果;

char *strings[4]={"abc","def","ghi"};

结果=find_char_for(字符串,"a");

printf("用于执行:%dn",结果);

结果=find_char_while(字符串,"b");

printf("同时实现:%dn",结果);

结果=find_char_goto(字符串,"g");

printf("goto 实现了:%dn",结果);

返回0;

}

int find_char_for(char **字符串,int c)

{

//外层循环: 当数组不为空时每个字符串数组

for ( ; *strings!=NULL; strings++){

if (*strings==NULL) 返回0;

//内循环: 当每个字符串数组的字符不等于""时

for (; **strings!=""; *strings++)

if (**字符串==c)

返回1;

}

返回0;

}

int find_char_while(char *strings[3],int c)

{

while(*字符串!=NULL){

if (*strings==NULL) 返回0;

while( **字符串!="")

if (*(*strings)++==c)

返回1;

字符串++;

}

返回0;

}

int find_char_goto(char *strings[3],int c)

{

标签1:

if(*字符串!=NULL) {

标签2:

if(**strings!="") {

if(*(*字符串)++==c){

返回1;

}

转到标签2;

}

字符串++;

转到标签1;

}

返回0;

好了,文章到此结束,希望可以帮助到大家。

用户评论

她最好i

指针是什么样的东西啊?

    有10位网友表示赞同!

十言i

一直想弄懂指针的用法,这篇文章能解释清楚吗?

    有13位网友表示赞同!

江山策

感觉指针这个概念听起来很复杂...

    有5位网友表示赞同!

暖瞳

学习指针真是个挑战!希望这篇文章能给我一些帮助。

    有15位网友表示赞同!

代价是折磨╳

期待了解更多关于指向操作的小技巧。

    有8位网友表示赞同!

Edinburgh°南空

内存管理也是挺重要的吧,指针用到哪?

    有13位网友表示赞同!

涐们的幸福像流星丶

之前只听别人说“指针危险”,但不太明白为什么...

    有14位网友表示赞同!

浅巷°

我想知道指针的应用场景是什么样的。

    有13位网友表示赞同!

颓废人士

这个05. 指针 是哪个课程或者教材里的内容?

    有12位网友表示赞同!

∞◆暯小萱◆

感觉看懂指针之后就能更深入地理解程序运行了!

    有5位网友表示赞同!

心亡则人忘

指针能提高程序效率吗?

    有16位网友表示赞同!

慑人的傲气

学习编程真的挺全面的,从基础语法到指针都不落下!

    有8位网友表示赞同!

?娘子汉

希望这篇文章能用通俗易懂的语言解释指针,方便小白理解!

    有15位网友表示赞同!

封锁感觉

我感觉指针是编程里很有用的工具,但要好好掌握才行。

    有5位网友表示赞同!

夜晟洛

学指针的时候总觉得脑阔疼,希望这篇文章能像科普一样讲清楚。

    有9位网友表示赞同!

一个人的荒凉

有没有什么简单易懂的例子来解释指针的运作机制?

    有8位网友表示赞同!

蝶恋花╮

指针的使用场景很多吗?比如经常用到哪些地方?

    有13位网友表示赞同!

厌归人

学习到指针之后我感觉可以自己写一些更复杂的程序了!

    有9位网友表示赞同!

鹿叹

指针到底是怎么操作内存地址的呢?这个部分我一直不太懂。

    有5位网友表示赞同!

此生一诺

在编写代码的时候,什么时候应该使用指针?有没有什么需要注意的?

    有5位网友表示赞同!

小清晰的声音

希望这篇文章能详细介绍各种指针的类型和用法,比如空指针、指向数组的指针等等...

    有20位网友表示赞同!

别在我面前犯贱

了解指针之后,我的编程思路好像就更清晰了!

    有12位网友表示赞同!

你与清晨阳光

会不会把指针理解错会影响程序的效果?有什么应对方法呢?

    有17位网友表示赞同!

旧爱剩女

感觉这篇文章标题有点抽象,能不能用一些更加生动的词来描述?

    有5位网友表示赞同!

【深入解析指针:第五章要点汇总】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:岁月磨砺,学会放手:人生感悟与抉择 下一篇:全球热门电商平台:盘点全球最受欢迎的10大在线购物网站