1.指针的定义(以char *为例,即指针指向的char类型的变量)
char *p=(这里可以等于空,可以等于地址,还可以等于字符串)
char *p="adlkfjalksdf";//p指针指向的内存存放的是这个字符串
char *p1=&x;//p指针指向的内存存放的是变量x
char *p=(char *)malloc(sizeof(char));//为指针p开辟了内存,但是还未存放内容
char *p;//没有开辟内存
char *p=NULL;//没有开辟内存
2.指针的使用(还是以char *为例)
*p=(这里只可以等于变量,不可以为空或地址)
p=(可以等于其他的指针,但是不能等于地址)
p+q;p+2;p++;指针之间可以加减,直接可以和int加减,得到的还是指针。(注:有的书上说指针之间的加法是非法的,减法是合法的)
*p='a';
*p=*q;
p=q;
p=&a;//这样赋值错误
p+q;
q=p+2;
p++;
3.函数中指针的使用
int str(char *s)//代表传过来的s是指针
{
char *p=s;//用指针p去接住s,后边p指针的用法同上。这样相当于p和s同时指向同一个地方,所以对p指向内容的修改就相当于在主函数中队s指向内容的修改了。
*p='a';
}
void main()
{
int a;
char *s = "dalkfajsdlkfja";
a = strlen(s);//传入指针,不是值。
char ss;
a = strlen(&ss);//传入指针,不是值。
}
4.指针与数组
char s[]和char *s等价。
char arr[]=“hello”;
char *arr=“hello”
f(int arr[])和f(int *arr)等价。
例如
void strlen(char *s,char *t)
{
int i;
i = 0;
while ((s[i] = t[i]) != '\0')
i++;
}
5.数组指针:数组里存的是指针,指针指向不同的变量。