`

指针与数组

    博客分类:
  • C
 
阅读更多

 

 

 一个变量的地址称作该变量的“指针”

 指针就是通过地址体现的

-----------------------------------------------------------------------------------------------------------

 

#include<stdio.h>

int main(){
	int a,b;
	int * p1,* p2;
	a = 10;
	b = 20;
	p1 = &a;//变量a的地址赋值给指针p1
	p2 = &b;
        //输出指针变量所指向的整型变量的值
        //p1代表指针变量本身,*p1代表指针所指向内存的内容
	printf("*p1 = %d,*p2 = %d",*p1,*p2);
	return 0;
}

交换两个指针的地址

#include<stdio.h>

int main(){
	int a=5,b=9;
	int * p1,* p2, * temp;
	p1 = &a;
	p2 = &b;
	if(a<b){
                //交换的指针所指向的地址
		temp = p1;
		p1 = p2;
		p2 = temp;	
	}
	printf("a = %d,b = %d\n",a,b);
	printf("*p1 = %d,*p2 = %d\n",*p1,*p2);
}
/*
原值a,b并没有发生改变
output:
a = 5,b = 9
*p1 = 9,*p2 = 5
*/

 交换两个指针所指向变量的值

#include<stdio.h>

int main(){
	int a=5,b=9,temp;
	int * p1,* p2;
	p1 = &a;
	p2 = &b;
	if(a<b){
                //交换指针变量
		temp = *p1;
		*p1 = *p2;
		*p2 = temp;	
	}
	printf("a = %d,b = %d\n",a,b);
	printf("*p1 = %d,*p2 = %d\n",*p1,*p2);
}
/*
原值发生改变
output:
a = 9,b = 5
*p1 = 9,*p2 = 5
*/

 野指针

int *p;//避免没有权限的地址操作,指针需要先有地址
*p=1;

 指针与地址

int main(void){	
	int x=1,y=2,arr[10];
	int *pp;//指向int类型的指针
	
	pp=&x;//pp指向变量x的地址
	printf("x = %d,y = %d,pp = %d\n",x,y,*pp);

	*pp = *pp + 1;
	printf("x = %d,y = %d,pp = %d\n",x,y,*pp);
	y = *pp + 1;
	++*pp;//*pp++错误写法,运算符遵循从右往左顺序
	(*pp)++;
	printf("x = %d,y = %d,pp = %d\n",x,y,*pp);
	return 0;
}
/* output:
x = 1,y = 2,pp = 1
x = 2,y = 2,pp = 2
x = 4,y = 3,pp = 4
*/
int main25(void){
	
	int x=1,y=2,arr[10];
	int *pp;//指向int类型的指针
	
	pp=&x;//pp指向变量x的地址
	*pp = 10;//x的值为10
	printf("x = %d,y = %d\n",x,y);
	y = *pp;//指针pp所指向变量的值赋给y
	printf("x = %d,y = %d\n",x,y);
	*pp = 100;
	printf("x = %d,y = %d\n",x,y);
	arr[0] = 1;
	pp = &arr[0];
	printf("x = %d,y = %d,pp = %d\n",x,y,*pp);
	return 0;
}
/*output:
x = 10,y = 2
x = 10,y = 10
x = 100,y = 10
x = 100,y = 10,pp = 1
*/
 指针与数组
int main(void){
	int arr[10] = {0,1,2,3,4,5,6,7,8,9};
	int *pa = arr;
	int i;
	for(i = 0;i<sizeof(arr)/sizeof(int);i++){
		//pa+i=arr[i] their address is equals
		printf("*pa = %d\n",*(pa+i));
	}
	for(i = 0;i<sizeof(arr)/sizeof(int);i++){
		//arrys is pointer
		printf("arr[%d] = %d\n",i,*(arr+i));
	}
	for(i = 0;i<sizeof(arr)/sizeof(int);i++){
		//bath method,their address is equals
		printf("%p,%p\n",&arr[i],arr+i);//arr不是变量,不能arr++/a=pp操作
	}
	return 0;
}
/*output:
*pa = 0
*pa = 1
*pa = 2
*pa = 3
*pa = 4
*pa = 5
*pa = 6
*pa = 7
*pa = 8
*pa = 9
arr[0] = 0
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 4
arr[5] = 5
arr[6] = 6
arr[7] = 7
arr[8] = 8
arr[9] = 9
0x7ffcf91e2b00,0x7ffcf91e2b00
0x7ffcf91e2b04,0x7ffcf91e2b04
0x7ffcf91e2b08,0x7ffcf91e2b08
0x7ffcf91e2b0c,0x7ffcf91e2b0c
0x7ffcf91e2b10,0x7ffcf91e2b10
0x7ffcf91e2b14,0x7ffcf91e2b14
0x7ffcf91e2b18,0x7ffcf91e2b18
0x7ffcf91e2b1c,0x7ffcf91e2b1c
0x7ffcf91e2b20,0x7ffcf91e2b20
0x7ffcf91e2b24,0x7ffcf91e2b24
*/
使用指针计算字符串长度
int mstrlen(char *pc);
int main(void){
	printf("%d\n",mstrlen("hello"));
	return 0;
}
int mstrlen(char *pc){
	int len;
	for(len=0;*pc!='\0';pc++){
		len++;
	}
	return len;
}
 

 

 

 

 

 

 

分享到:
评论

相关推荐

    C语言经典指针与数组ppt

    3. **数组与指针的关系** - **数组名作为指针**:在很多情况下,数组名可以被视为指向数组首元素的指针。例如,`int *p = a`等同于`int *p = &a[0]`。 - **指针运算**:可以使用指针运算符对指针进行加减操作,如`...

    C语言程序设计-指针与数组.pptx

    在C语言程序设计中,指针和数组是两种...熟练掌握指针与数组的交互,对于编写高效的C语言程序至关重要。在编程时,灵活运用这两种工具,可以实现诸如动态数组、链表等更复杂的数据结构,从而提高代码的灵活性和性能。

    指针的用法大全,指针与数组,指针详解

    指针与指针数组也是常见的组合,指针数组可以存储一系列的指针,这样可以方便地管理和操作一组对象。例如,`int *ptrs[10];`定义了一个可以存储10个整型指针的数组。 最后,要特别注意指针的生命周期和空指针。未...

    jidao-chap9 指针与数组(2017).rar_指针与数组教学

    本教学资源“jidao-chap9 指针与数组(2017).ppt”显然是一个关于这两部分知识的详细讲解,适合C语言初学者和进阶者学习。 首先,我们来深入理解一下指针。指针在C语言中扮演着特殊的角色,它是一个变量,但存储的...

    指针与数组基础整理

    需要注意的是,字符指针数组(char* arrayName[length])可以存储多个字符串的首地址,而其他类型的指针数组需要根据具体情况来声明。 5. 指针与字符串 C语言中表示字符串有两种方式:字符数组和字符串常量。字符...

    指针与数组区别,实验与指导-数组指针字符串

    1. 使用指针数组来实现三整数的排序。 ```c void swap(int *pt1,int *pt2){ int temp; temp=*pt1; *pt1=*pt2; *pt2=temp; } void exchange(int *q1,int *q2,int *q3){ if(*q1&lt;*q2)swap(q1,q2); if(*q1&lt;*q3)...

    <指针与数组定义小结>

    指针与数组的转换也是C语言中的常见操作。数组名在很多情况下可以被视为指向数组首元素的指针,但需要注意的是,数组不是指针,它们在内存中是一段连续的空间。而指针可以被赋值、传递给函数或动态调整其指向的内存...

    浅析C语言中指针与数组[借鉴].pdf

    浅析C语言中指针与数组 本文旨在浅析C语言中指针与数组的概念、特征和应用。指针是C语言中的精华,正确灵活的应用指针,能动态的分配内存,有效的表示复杂的数据结构,方便的使用数组。指针极大丰富了C语言的功能。...

    整型指针与数组PPT学习教案.pptx

    该资源是关于整型指针与数组的PPT学习教案,共45页,涵盖了指针变量、指针与数组、scanf与指针、指针与赋值等知识点。 knowledge point 1: 指针变量 ------------------------- * 指针变量是一种特殊的变量,用于...

    指针与数组.txt 指针与数组.txt

    从给定的文件信息来看,主要讨论了C++中指针与数组的使用,特别是如何通过指针操作数组元素以及多维数组中的指针应用。下面将详细解析这些知识点: ### 指针与一维数组 #### 一、数组名作为指针 在C++中,数组名...

    C语言指针与数组关系研究及应用.pdf

    因此,可以使用数组指针和指针数组两种方法来处理二维数组和指针的关系。 数组指针是一种特殊的指针,它指向一个一维数组或多个维度的数组。通过定义一个数组指针,并给它赋值一个二维数组的首地址,我们能够通过...

    C语言教学中指针与数组的运用分析.pdf

    理解数组指针和指针数组的差异,可以帮助学生更加深入地理解数组的内部结构和指针的操作方式。通过实践和示例代码的讲解,学生可以逐步掌握如何使用指针来处理数组,以及如何在数组中运用指针变量来达到编程的目的。...

    指针与数组的关系.doc

    指针与数组的关系 指针和数组是 C 语言中两个非常重要的概念,它们之间存在着密切的关系。利用这种关系,可以增强处理数组的灵活性,加快运行速度。 1. 指针与数组的关系 指针变量可以指向数组名,使得指针变量...

    指针与数组的指向问题的理解.docx

    理解指针与数组之间的关系对于深入掌握这两种概念至关重要。下面将详细阐述指针与数组的指向问题,以及如何在实际编程中正确地运用它们。 首先,数组在内存中是一个连续的存储空间,用于存放相同类型的数据。数组名...

    指针数组与数组指针

    ### 指针数组与数组指针的概念及区别 在计算机编程中,特别是C语言及其衍生语言中,指针是一个非常重要的概念。它允许程序员直接访问内存地址,并对其进行操作。当我们深入探讨指针时,会遇到两个看似相似但实际上...

    指针与数组.docx 指针数组:数组类型 *数组名数组长度

    本文将详细解析指针数组和数组指针的概念,以及它们在访问二维数组时的区别。 首先,我们要明确两个定义: 1. **指针数组**:这种结构是一个数组,其每个元素都是一个指针。例如,`int *parr[5]` 定义了一个包含5...

    实验7指针与数组参考答案.rar

    在实验7中,你可能会遇到各种指针和数组的操作,包括动态内存分配(如`malloc`、`calloc`、`realloc`和`free`),多维数组,指针数组,以及使用指针处理字符串。理解指针与数组的相互作用,能帮助你更有效地实现数据...

    C语言教学课件:14-2_指针与数组.ppt

    它允许我们把函数作为另一个函数的参数,或者将函数赋值给变量,从而实现回调函数和函数指针数组等功能。 总的来说,C语言中的指针与数组相互交织,提供了丰富的内存管理和数据操作方式。理解这些概念并熟练运用,...

Global site tag (gtag.js) - Google Analytics