/*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;
好了,文章到此结束,希望可以帮助到大家。
【深入解析指针:第五章要点汇总】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
指针是什么样的东西啊?
有10位网友表示赞同!
一直想弄懂指针的用法,这篇文章能解释清楚吗?
有13位网友表示赞同!
感觉指针这个概念听起来很复杂...
有5位网友表示赞同!
学习指针真是个挑战!希望这篇文章能给我一些帮助。
有15位网友表示赞同!
期待了解更多关于指向操作的小技巧。
有8位网友表示赞同!
内存管理也是挺重要的吧,指针用到哪?
有13位网友表示赞同!
之前只听别人说“指针危险”,但不太明白为什么...
有14位网友表示赞同!
我想知道指针的应用场景是什么样的。
有13位网友表示赞同!
这个05. 指针 是哪个课程或者教材里的内容?
有12位网友表示赞同!
感觉看懂指针之后就能更深入地理解程序运行了!
有5位网友表示赞同!
指针能提高程序效率吗?
有16位网友表示赞同!
学习编程真的挺全面的,从基础语法到指针都不落下!
有8位网友表示赞同!
希望这篇文章能用通俗易懂的语言解释指针,方便小白理解!
有15位网友表示赞同!
我感觉指针是编程里很有用的工具,但要好好掌握才行。
有5位网友表示赞同!
学指针的时候总觉得脑阔疼,希望这篇文章能像科普一样讲清楚。
有9位网友表示赞同!
有没有什么简单易懂的例子来解释指针的运作机制?
有8位网友表示赞同!
指针的使用场景很多吗?比如经常用到哪些地方?
有13位网友表示赞同!
学习到指针之后我感觉可以自己写一些更复杂的程序了!
有9位网友表示赞同!
指针到底是怎么操作内存地址的呢?这个部分我一直不太懂。
有5位网友表示赞同!
在编写代码的时候,什么时候应该使用指针?有没有什么需要注意的?
有5位网友表示赞同!
希望这篇文章能详细介绍各种指针的类型和用法,比如空指针、指向数组的指针等等...
有20位网友表示赞同!
了解指针之后,我的编程思路好像就更清晰了!
有12位网友表示赞同!
会不会把指针理解错会影响程序的效果?有什么应对方法呢?
有17位网友表示赞同!
感觉这篇文章标题有点抽象,能不能用一些更加生动的词来描述?
有5位网友表示赞同!