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元起,快前往官网查看详情吧