指针的概念:
在c语言中,内存单元的地址称为指针,指针是专门存放地址的变量,有的时候对地址,指针和指针变量不区分,统称为指针(地址==指针)
一般形式:
数据类型 *指针变量名
char *pName;
指针的英文名叫pointer
指针的含义:
指针指向的内存 区域中的数据称为指针的目标
什么是指针:指针就是内存单元的地址
指针有多少个字节呢:是八个字节,64位的电脑
指针运算:
指针和数组:
数组的指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的起始地址。
一维数组的数组名为一维数组的指针(起始地址)
int a【】;不可以是a++;a++是a=a+i 因为a是常量,不能更改常量,但是a+i可以,a+i不等于a=a+i;
实现数组倒序输出
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[] = {1,2,3,3,5,6,59,4556,566};
int *p1,*p2,n,t;
n=sizeof(a)/sizeof(a[0]);
p1 =a;
p2 = &a[n-1];
while(p1<p2){
t = *p1;
*p1 = *p2;
*p2 = t;
p1 ++;
p2--;
}
for(t = 0 ;t <n;t ++){
printf("%d ",a[t]);
}
return 0;
}
二级指针:
行指针(数组指针)
例如:int a[2][3]; int (*p)[3】;
方括号中的常量表达式表示指针加1,移动几个数据
当用行指针操作二维数组时,表达式一般写成1行的元素个数,即列数,
就是*p代表一维数组,后面代表二维数组
字符串与指针
字符串输出用%s,字符串结尾默认有\0,占一个下标,
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string[]="L Love LiWenBo";
printf("%s \n",string);
printf("Hello world!\n");
return 0;
}
同样也可以用字符指针
字符串中字符的存取方法
下标法:字符串a复制给字符串b
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[]="L Love LiWenBo",b[40];
int i;
for(i=0;*(a+i) !='\0';i++){
*(b+i)=*(a+i);
}
*(b+i) = '\0';
printf("%s \n",a);
for(i=0;b[i] !='\0';i++){
printf("%c \n",b[i]);
}
return 0;
}
指针法:字符串a复制给字符串b
#include <stdio.h>
#include <stdlib.h>
void copy_string(char *from,char *to)
{
int i;
while((*to = *from)!='\0'){
to ++;
from++;
}
//*to='\0';
}
int main(){
void copy_string(char *from,char *to);
char *a = "i am dashuaige156756721";
char b[] = "you is dachoubi";
printf("%s %s\n",a,b);
printf("``~~~~~~~~~~~~~~~~~~~~~\n");
copy_string(a,b);
printf("%s %s\n",a,b);
}
#include <stdio.h>
#include <stdlib.h>
void copy_string(char *from,char *to)
{
int i;
for(;*from != '\0';from++,to++){
*to = *from;
}
*to='\0';
}
int main(){
void copy_string(char *from,char *to);
char *a = "i am dashuaige12221";
char b[] = "you is dachoubi";
printf("%s %s\n",a,b);
printf("``~~~~~~~~~~~~~~~~~~~~~\n");
copy_string(a,b);
printf("%s %s\n",a,b);
}
记住常量不可以被更改,不能是*b 一定要是b【】