c语言语法基础之——指针(字符、一维数组) 学习

指针理解:

  1. 指针也是一个变量;只能装地址,不能装常量;
  2. 指针一般用p、q、m、n 来表示,不用b表示;
  3. 指针的类型与它指向的变量的类型一致;
  4. 指针运算符: * 、 & ( * 代表指针;& 代表地址 )

int 占内存2个b
float 占内存4个b

普通变量指针

c语言语法基础之——指针(字符、一维数组) 学习_第1张图片

int a=3,b=4,d;
int *b=&a; // * 代表指针;& 代表地址
int *b=5; // 会报错,因为只能装地址,不能装常量
printf("%d",a);
printf("%d",*b); //要用到a的值得话,用 *b ; b 是 a 的指针;b 是 a 的地址;*b 表示该指针指向的变量的值
printf("%d",b); //要用到a的地址得话,用 b ,内存地址是个十六进制值;计算机内存一般以16进制来表示。b 表示该指针指向的变量的地址

int c=*b+1; // ;
printf("%d",c);

p1=&a; // 不能是 *p1=&a ,会报错
p2=&b;
d=*p1+*p2;
p2=&a;

p=&(a+1); // 错误写法

打印出:
3
3
22316

4
// 定义指针的两种方式
int a, *p; // 一
p=&a;

int a, *p=&a; // 二


指针版最大数:


int main(int argc, char *argv[]) {
	int a,*p=&a,i,max=0,*p1=&max;
	for(i;i<10;i++){
		scanf("%d",p);
		if(*p>*p1){
			p1=p;
		}
	}
	printf("最大数是:%d",*p1);
	
	
	
	return 0;
}

数组变量指针;

p指向谁的地址,此时就替代谁来操作;
c语言语法基础之——指针(字符、一维数组) 学习_第2张图片
注意点:
数组名本身是特殊的指针,是个常量,不能参加运算,比如:
int a[]={1,2} 、char a[]=“Hello W”
a --> 数组名本身,默认是数组第一个元素

指针p是个变量,比如:
*p=“Hello W”
c语言语法基础之——指针(字符、一维数组) 学习_第3张图片

int *p,i;
int a={1,2,3,4,5};
p=a;// *p=a[0]=1
p++; // 2
p=a+4;
printf("%d", *p); // 5  主要看指针指向哪,移到哪就代表哪个地方
p--; // 4

main() {
	// 斐波那契前12项之和  指针版 
	int *p,sum=2;
	int a[12]; // 一般都是12个元素;10、11 也可以,但是9就不行了,因为下边有一句*p=*(p-1)+*(p-2),指针是可以动的,这里可以扩充两个元素
	p=a; 
	*p=1;
	printf("第一项是 %d",*p);
	p++;
	*p=1;
	printf("第二项是 %d",*p); 

	p++; // 需要定位到从下标2开始,也就是第3项开始 ;或者for括号里写 p=a+2
	for(;p<=(a+11);p++){ // p<(a+11) 也可以写成 p<=a+11 
		*p=*(p-1)+*(p-2);
		printf("\n%d",*p); // a[i]
		sum=sum+*p;
	}
	printf("\n斐波那契数列前12项和=%d",sum);
 
	return 0;
}

指针与数组的关系:
二维数组一般用保留 i 的方式去处理;
一维数组用哪种方式都行。
c语言语法基础之——指针(字符、一维数组) 学习_第4张图片

你可能感兴趣的