C语言编程入门——指针与函数、数组

总结一下指针与函数和数组的关系及相关练习。

传统数组的缺点:

# include <stdio.h>

int main(void)
{
	//数组的定义
	int len = 5;
	int a[len]; //错误,数组的长度必须直接指定,且不能更改。
	int b[5]; //正确。

	return 0;
}

确定一个数组需要几个参数:

# include <stdio.h>

//本函数功能是输出任意一维数组。
void string(int * p, int l) //函数对数组进行处理,需要接收两个参数:函数第一个元素的地址(即数组名)和数组元素的个数。
{
	int i;

	for (i=0; i<l; ++i)
		printf("a[%d] = %d\n",i, *(p+i));  //地址+1即为数组中下一连续元素的地址。
}

int main(void)
{
	int a[5] = {1, 2, 3, 4, 5};

	string(a, 5);

	return 0;
}

指针与数组示例1:

# include <stdio.h>

int main(void)
{
	int a[5] = {1, 2, 3, 4, 5};
	int i;

	*a = 9; //一维数组名即表示数组中第一个元素的地址。
	*(a+1) = 10; //依次类推,a+1、a+2...a+i分别表示第2个、第3个...第i+1个元素。地址+1即为数组中下一连续元素的地址。

	printf("数组名a表示的地址为:%#X\n", a);  //以十六进制整型输出数组的地址。

	for (i=0; i<5; ++i)
	{
		printf("a[%d] = %d  其地址为:%#X\n", i+1, a[i], &a[i]);  //以十六进制整型输出数组的地址。
	}
	printf("地址以十进制输出:\n");
	for (i=0; i<5; ++i)
	{
		printf("a[%d] = %d  其地址为:%d\n", i+1, a[i], &a[i]);  //以十进制整型输出数组的地址。
	}

	return 0;
}

/*
	若int类型数组地址以十进制输出
	其结果为:
			地址以十进制输出:
			a[1] = 9  其地址为:1638196
			a[2] = 10  其地址为:1638200
			a[3] = 3  其地址为:1638204
			a[4] = 4  其地址为:1638208
			a[5] = 5  其地址为:1638212
	可见,每相邻两个变量地址编号之间相差4,因为int类型数据占4个字节,即占4个编号,以其首编号为其编号,所以相邻编号相差4,
	同理,double类型数组相邻两个变量地址编号相差8
*/

指针与数组示例2:

# include <stdio.h>

void arr(int * p, int len)
{
	int i;

	for (i=0; i<len; ++i)
	{
		printf("a[%d] = %d\n", i, p[i]); //此处写*(p+i)和p[i]都是完全等价的,*(p+i)、p[i]、a[i]和*(a+i)都是同一个变量。
	}

	return;
}

int main(void)
{
	int a[10] = {1,2,3,4,5};

	arr(a, 10);

	return 0;
}

指针与数组示例3:

# include <stdio.h>

int main(void)
{
	int a[5] = {1,2,3,4,5};
	int i;

	for(i=0; i<5; ++i)
		printf("a[%d] = %d\n", i, *(a+i)); //此处写*(a+i)和a[i]都是完全等价的。

	return 0;
}

指针与数组示例4:

# include <stdio.h>

void change(int * pArr, int len);
{
	pArr[3] = 99; //pArr[3]与a[3]是同一个变量。

	return;
}

int main(void)
{
	int a[6] = {1,2,3,4,5,6};

	printf("a[3] = %d\n", a[3]);

	change(a, 6);

	printf("a[3] = %d\n", a[3]);

	return 0;
}

指针与数组示例5:

# include <stdio.h>

int main(void)
{
	int a[5] = {1,2,3,4,5};

	printf("%#X, %#X\n", a, &a[0]); //a与&a[0] 是完全等价的, a == &a[0]。

	//a = &a[2]; //错误,数组名a是一个指针常量,不可被赋值修改。

	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 06:45:58

C语言编程入门——指针与函数、数组的相关文章

C语言编程入门——指针(上)

指针,是C语言的灵魂,也是C语言与其他高级编程语言不同的地方,它可以灵活的操作内存,同样,也会带来很多问题,需要安全的使用指针. 指针变量是指存放变量地址的变量,刚开始学可能会有点困难,需要多多理解. 指针常见错误1: # include <stdio.h> int main(void) { int * p; //定义int类型变量指针p int i = 3; *p = i; //此语句错误,*p未初始化,p存放了未知的地址,指向了未知的变量,如果被i修改,则会导致错误. printf(&qu

C语言编程入门——指针(下)

函数的重载: # include <stdio.h> void swap(void) { printf("呵呵!\n"); return; } void swap(int i, int j) { printf("哈哈!\n"); return; } int main(void) { swap(); swap(1, 2); //函数名相同,形参个数不同,也不是同一个函数. int i = 3; printf("i = %d\n", i)

《Go语言编程入门》视频课程开课了

作为拥有多年工作经验的运维老鸟,我没有选择运维常用的Python作为我今后的主要使用语言.Python编写运维程序的开发效率虽然很高,但随着代码量的增大,以及Python的缩进式语法结构,可读性和维护性并不很高.加之Python本身的设计,并不原生支持多线程多核,我考虑到当程序代码达到一定规模时,必然会考虑它的执行效率和维护成本.最终放弃了Python,选择语言的过程中被Google新出的Go语言吸引了.Go本身脱胎于C,语法和C比较像,我本身就一直学习和编写C和PHP程序,习惯了大括号的语法结

linux 操作系统下c语言编程入门

2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编

【C语言】-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 回到顶部 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否

C语言编程入门——动态内存分配

内存管理,是指软件运行时对计算机内存资源的分配和使用的技术.其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源.内存管理是C语言编程中重要的组成部分,C语言中的内存需要手动分配,手动释放,一般遵循分配多少,释放多少,以免造成内存泄漏.内存管理是一项重要且复杂的事情,理解内存管理,对后面课程及项目的学习会有很大的作用. 之前创建变量,是系统自动分配的内存,放在栈内存中,销毁后被系统自动回收,手动分配的内存,放在堆内存中,需要手动释放.千万不要忘记销毁对象手动将内存释放并将指针

C语言 14-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略. 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否都觉得头

【学习笔记】【C语言】返回指针的函数

函数如果带*的返回的就是指针 char *test(){ } 1 #include <stdio.h> 2 char *test(); 3 4 /* 5 返回指针的函数 6 */ 7 8 int main() 9 { 10 char *name = test(); 11 12 printf("name=%s\n", name); 13 14 return 0; 15 } 16 17 char *test() 18 { 19 return "rose";

C语言学习入门 (三) sizeof 函数、内存地址、数组

sizeof可以用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址. 凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址 2.  当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量.比如: char a = 'A';// A的ASCII