c语言指针

指针的概念:

在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【】

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值