指針類型的函數
若函數的返回值是指針,該函數就是指針類型的函數。數組
指針函數的定義形式函數
存儲類型 數據類型 *函數名() { //函數體語句 }
1 錯誤的例子 2 3 int main(){ 4 int* function(); 5 int* ptr= function(); 6 *prt=5; //危險的訪問! 7 return 0; 8 } 9 int* function(){ 10 int local=0; //非靜態局部變量做用域和壽命都僅限於本函數體內 11 return &local; 12 }//函數運行結束時,變量local被釋
1 正確的例子1 2 3 #include 4 using namespace std; 5 int main(){ 6 int array[10]; //主函數中定義的數組 7 int* search(int* a, int num); 8 for(int i=0; i<10; i++) 9 cin>>array[i]; 10 int* zeroptr= search(array, 10); //將主函數中數組的首地址傳給子函數 11 return 0; 12 } 13 int* search(int* a, int num){ //指針a指向主函數中定義的數組 14 for(int i=0; i<num; i++) 15 if(a[i]==0) 16 return &a[i]; //返回的地址指向的元素是在主函數中定義的 17 }//函數運行結束時,a[i]的地址仍有
1 正確的例子2 2 3 #includeusing namespace std; 4 int main(){ 5 int* newintvar(); 6 int* intptr= newintvar(); 7 *intptr=5; //訪問的是合法有效的地址 8 delete intptr; //若是忘記在這裏釋放,會形成內存泄漏 9 return 0; 10 } 11 int* newintvar (){ 12 int* p=new int(); 13 return p; //返回的地址指向的是動態分配的空間 14 }//函數運行結束時,p中的地址仍有效 15