#include <stdio.h> #include <stdlib.h> void point(char *pt); void point2(char *pt); void point3(char **pt); int main() { char b[4] = { 'a', 'c', 's', 'f' }; char *pt = b; point(pt); printf("%c\n", *pt); point2(pt); printf("%c\n", *pt); pt=b; point3(&pt); printf("%c\n", *pt); return 1; } void point(char *p) //这里没有传过来指针的地址 所以所做的修改仅仅是在本函数中指针p有效 //所以不会影响外部的pt指针 { p += 3; } void point2(char *p){ *p+=3;//这样也不对 这样只是将pt指向的空间的值加上3 而已 并没有移动指针... } //想要再一个函数中修改函数外的变量内容 必须传入那个变量的地址 void point3(char **p){ (*p)+=1;//传入的是二级指针p *p取了依次值 那么(*p)就是以一级别指针 //(*p)指向的位置就是 在外部函数中pt指向的位置 //(*p)的值+1 指针向后移动 }
#include <stdio.h> #include <stdlib.h> void change(char str[]); void change2(char **str); int main(){ char str[]="sdfsdf"; change(str); printf(str); printf("\n"); char *str2=(char *)malloc(20*sizeof(str2)); //str2="5566";//这样定义的5566的这段空间也是只读的 //change2(str2); int i=0; for(;i<4;i++){ *(str2+i)='a'+i; } *(str2+i)='\0'; printf(str2); change2(&str2); printf(str2);//1bcd printf("\n"); } void change(char *str){ *str='1'; } void change2(char **str){ **str='1'; }