重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C指针之初始化(三)-创新互联

一、引言

C/C++语言中引入了指针,使得程序能够直接访问内存地址,使得很多复杂的操作变得简单,同时也提高了程序的运行效率。指针即是地址,但是地址却是通过指针变量来存储的。因此我们通常所说的指针在很多时候说的都是指针变量。指针变量在使用之前必须被初始化,否则就可能发生意想不到的错误。而且关于指针初始化,不同的编译器给出的告警是不一样的,有些系统给出告警,而有些系统又不给。因此,指针虽然,但使用要谨慎。而且要是使用了动态分配空间的模式为指针做初始化,则使用结束后还需要手工释放空间,以节约内存空间。本文以C语言为主介绍了常见的指针变量初始化方法。

创新互联建站自2013年起,先为鼓楼等服务建站,鼓楼等地企业,进行企业商务咨询服务。为鼓楼企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。二、指针变量初始化范例

1.指向某个变量的地址
示例代码:

#include"stdio.h"  
int main()
{int a = 1;
	int *p = &a;//指针变量初始化 
	printf( " 存储变量a的地址:%x\n", &a );
	printf( " 指针变量p存储的地址:%x\n", p );
	printf( " 指针变量p指向地址中的数据:%5d\n", *p );
	return 0;
}

运行结果:
在这里插入图片描述
2.动态分配空间
通常用于动态数组,C语言使用malloc进行动态分配空间,C++使用new分配空间。动态数组使用结束需要释放空间,使用free或者delete进行释放。
示例代码:

#include"stdio.h" 
#include"malloc.h"
int main()
{int i, num, sum, count;
	int *arr;
	count = 0;
	while( 1 )
	{sum = 0;
		num = 0;
		printf( "数组元素的个数(0 结束):" );
		scanf( "%d", &num );
		if( num == 0 )
		{	printf( "结束运行!\n" );
			break;
		}
		count++;
		arr = ( int * )malloc( num * sizeof( int ) );//动态分配空间
		for( i=0; i	printf( "输入第 %d 个元素:", i+1 );
			scanf( "%d", &arr[i] );
			sum += arr[i];
		}
		printf( "第 %d 组元素之和:%5d\n", count, sum );
	}
	free( arr );//释放由malloc分配的空间 
	return 0;
}

上述代码是C语言,如果使用C++语言,则是如下代码:

#include"iostream" 
using namespace std;
int main()
{int i, num, sum, count;
	int *arr;
	count = 0;
	while( 1 )
	{sum = 0;
		num = 0;
		cout<< "数组元素的个数(0 结束):";
		cin>>num;
		if( num == 0 )
		{	cout<<"结束运行!"<	cout<<"输入第 "<<(i+1)<< " 个元素:";
			cin>>arr[i];
			sum += arr[i];
		}
		cout<<"第 "<< count<<" 组元素之和:"<<  sum<< endl;
	}
	delete[] arr;//释放由new分配的空间 
	return 0;
}

运行结果:
在这里插入图片描述
3.指向某个数组的首地址
通常用于快速对数组元素做相应的操作,例如利用指针变量p++模式对数组赋值或者读取元素,其读取内存速度快。
示例代码:

#include"stdio.h" 
#define N 10
int main()
{int i, arr[N], *p;
	p = arr; //p = &arr[0]; //指针变量p指向数组的首地址,此处有两种不同的赋值方法
	i = 1;
	while( i<= N )
	{printf( "输入第 %d 个元素: ", i );
		scanf( "%d", p++ );
		i++;
	}
	printf( "数组arr中的元素:" );
	for( i=0; iprintf( "%5d", arr[i] );
	}
	return 0;
}

运行结果:
在这里插入图片描述
4.指向字符串变量或字符串常量
通常用于快速对字符串做相应的操作。
示例代码:

#include"stdio.h"
#include"string.h"
int main()
{char *pc;                    
	//pc = "c language";//如此初始化指针会发生告警
	char str[] = "C/C++ Programming language";
	pc = str; 
	printf( "%s\n", pc ); 
	pc = pc + 2;           
	printf( "%s\n", pc ); 
	char *p = strstr( pc, "lan" );//找到 "lan"在pc中位置地址,赋值为指针变量p 
	printf( "%s\n", p );
	return 0;
}

运行结果:
在这里插入图片描述
5.利用其它指针做初始化
通常用于缓存某一地址。
示例代码:

#include"stdio.h"
#include"malloc.h"
int main()
{int i, *p, *q;
	int num = 5;
	p = ( int * )malloc( num * sizeof(int) );//动态分配空间
	q = p;//q指向p的地址,这样当q的位置发生改变时,p的首地址不变
	i = 1;
	while( i<= num )
	{printf( "输入第 %d 个元素: ", i );
		scanf( "%d", q++ );//利用指针变量q偏移来对动态数组p赋值
		i++;
	}
	printf( "数组arr中的元素:" );
	for( i=0; iprintf( "%5d", p[i] );
	}
	return 0;
}

在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:C指针之初始化(三)-创新互联
当前URL:http://cqcxhl.com/article/hgcoi.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP