十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
C/C++語言中引入了指針,使得程序能夠直接訪問內(nèi)存地址,使得很多復(fù)雜的操作變得簡單,同時(shí)也提高了程序的運(yùn)行效率。指針即是地址,但是地址卻是通過指針變量來存儲的。因此我們通常所說的指針在很多時(shí)候說的都是指針變量。指針變量在使用之前必須被初始化,否則就可能發(fā)生意想不到的錯(cuò)誤。而且關(guān)于指針初始化,不同的編譯器給出的告警是不一樣的,有些系統(tǒng)給出告警,而有些系統(tǒng)又不給。因此,指針雖然,但使用要謹(jǐn)慎。而且要是使用了動態(tài)分配空間的模式為指針做初始化,則使用結(jié)束后還需要手工釋放空間,以節(jié)約內(nèi)存空間。本文以C語言為主介紹了常見的指針變量初始化方法。
1.指向某個(gè)變量的地址
示例代碼:
#include"stdio.h"
int main()
{int a = 1;
int *p = &a;//指針變量初始化
printf( " 存儲變量a的地址:%x\n", &a );
printf( " 指針變量p存儲的地址:%x\n", p );
printf( " 指針變量p指向地址中的數(shù)據(jù):%5d\n", *p );
return 0;
}
運(yùn)行結(jié)果:
2.動態(tài)分配空間
通常用于動態(tài)數(shù)組,C語言使用malloc進(jìn)行動態(tài)分配空間,C++使用new分配空間。動態(tài)數(shù)組使用結(jié)束需要釋放空間,使用free或者delete進(jìn)行釋放。
示例代碼:
#include"stdio.h"
#include"malloc.h"
int main()
{int i, num, sum, count;
int *arr;
count = 0;
while( 1 )
{sum = 0;
num = 0;
printf( "數(shù)組元素的個(gè)數(shù)(0 結(jié)束):" );
scanf( "%d", &num );
if( num == 0 )
{ printf( "結(jié)束運(yùn)行!\n" );
break;
}
count++;
arr = ( int * )malloc( num * sizeof( int ) );//動態(tài)分配空間
for( i=0; i printf( "輸入第 %d 個(gè)元素:", 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<< "數(shù)組元素的個(gè)數(shù)(0 結(jié)束):";
cin>>num;
if( num == 0 )
{ cout<<"結(jié)束運(yùn)行!"< cout<<"輸入第 "<<(i+1)<< " 個(gè)元素:";
cin>>arr[i];
sum += arr[i];
}
cout<<"第 "<< count<<" 組元素之和:"<< sum<< endl;
}
delete[] arr;//釋放由new分配的空間
return 0;
}
運(yùn)行結(jié)果:
3.指向某個(gè)數(shù)組的首地址
通常用于快速對數(shù)組元素做相應(yīng)的操作,例如利用指針變量p++模式對數(shù)組賦值或者讀取元素,其讀取內(nèi)存速度快。
示例代碼:
#include"stdio.h"
#define N 10
int main()
{int i, arr[N], *p;
p = arr; //p = &arr[0]; //指針變量p指向數(shù)組的首地址,此處有兩種不同的賦值方法
i = 1;
while( i<= N )
{printf( "輸入第 %d 個(gè)元素: ", i );
scanf( "%d", p++ );
i++;
}
printf( "數(shù)組arr中的元素:" );
for( i=0; iprintf( "%5d", arr[i] );
}
return 0;
}
運(yùn)行結(jié)果:
4.指向字符串變量或字符串常量
通常用于快速對字符串做相應(yīng)的操作。
示例代碼:
#include"stdio.h"
#include"string.h"
int main()
{char *pc;
//pc = "c language";//如此初始化指針會發(fā)生告警
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;
}
運(yùn)行結(jié)果:
5.利用其它指針做初始化
通常用于緩存某一地址。
示例代碼:
#include"stdio.h"
#include"malloc.h"
int main()
{int i, *p, *q;
int num = 5;
p = ( int * )malloc( num * sizeof(int) );//動態(tài)分配空間
q = p;//q指向p的地址,這樣當(dāng)q的位置發(fā)生改變時(shí),p的首地址不變
i = 1;
while( i<= num )
{printf( "輸入第 %d 個(gè)元素: ", i );
scanf( "%d", q++ );//利用指針變量q偏移來對動態(tài)數(shù)組p賦值
i++;
}
printf( "數(shù)組arr中的元素:" );
for( i=0; iprintf( "%5d", p[i] );
}
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧