最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解雙指針的兩種用法

 更新時間:2013年05月29日 09:05:21   作者:  
本篇文章是對雙指針的兩種用法進行了詳細的分析介紹,需要的朋友參考下
好久沒有用過C/C++的二級指針了,總覺的它就是指針的指針,沒什么大不了的,但是今天看到一道面試題,感覺自己對二級指針的理解還是不夠深刻。于是,從網(wǎng)上找資料,學習了一番……
題目是這樣的:
復制代碼 代碼如下:

#include "stdafx.h"
#include <iostream>
using namespace std;
void GetMemory(char *p, int num)
{
 p = (char *)malloc(sizeof(char) * num);
 //p = new char[num];  //C++當中
}
int _tmain(int argc, _TCHAR* argv[])
{
         char *str = NULL;
 GetMeory(str, 100);
 strcpy(str,"Hello");
 cout << str << endl;
 return 0;
}

問:程序能否達到目的:在GetMemory()中為main函數(shù)中的開辟空間,并將str指向這段空間?
分析:str是一個指針,指向NULL,形參p也是一個指針,初始也指向NULL,在GetMemory函數(shù)中,這個指針又指向了新開辟的空間。但是只是形參的指向改變了,實參str仍然指向NULL,并沒有改變。因此,程序達不到題目的要求,而且運行時會出現(xiàn)錯誤,由于str一直指向NULL,執(zhí)行strcop時,會出現(xiàn)錯誤,提示某某內存不能寫入。

正確的方法應該采用雙指針,程序如下:
復制代碼 代碼如下:

#include "stdafx.h"
#include <iostream>
using namespace std;
void GetMeory(char **p, int num)
{
 *p = (char *)malloc(sizeof(char) * num);
 //*p = new char[num];  //C++當中
}
int _tmain(int argc, _TCHAR* argv[])
{
 char *str = NULL;
 GetMeory(&str, 100);
 strcpy(str,"Hello");
 cout << str << endl;
 return 0;
}

分析:str是一個指針,指向NULL。而調用GetMemory函數(shù)時,傳遞的是str的地址,p是一個二級指針,*p是一個指針。因此,將str的地址賦給臨時變量p,則*p就是指針str的值,改變*p的值就相當于改變str的值。因此這種方法能夠得到題目要求的效果。另外還有一種方法,采用一級指針,讓函數(shù)返回一個指針變量,指向新分配的內存,程序如下:
復制代碼 代碼如下:

#include "stdafx.h"
#include <iostream>
using namespace std;
char * GetMeory2(char *p, int num)
{
 p = (char *)malloc(sizeof(char) * num);
 //p = new char[num];  //C++當中
 return p;
}
int _tmain(int argc, _TCHAR* argv[])
{
 char *str = NULL;
 str = GetMeory2(str, 100);
 strcpy(str,"Hello");
 cout << str << endl;
 return 0;
}

2. 另外用二級指針還經常用在動態(tài)申請二維數(shù)組。
復制代碼 代碼如下:

void main()
{
int m , n , **p;
scanf("%d%d" , &m , &n);
p = (int **)malloc(m * sizeof(int *))
//C++中建議使用:p = new int* [m];
for(i = 0 ; i < m ; i++)
p[i] = (int *)malloc(n * sizeof(int));
//C++:p[i] = new int[n];
}

這樣就實現(xiàn)了二維數(shù)組的動態(tài)申請,因為一般數(shù)組聲明時,不允許下標是變量,所以如果想動態(tài)決定數(shù)組各維的大小,最好這樣做。

附:關于指針的一些定義

相關文章

  • C語言數(shù)據(jù)結構之順序數(shù)組的實現(xiàn)

    C語言數(shù)據(jù)結構之順序數(shù)組的實現(xiàn)

    這篇文章主要介紹了C語言數(shù)據(jù)結構之順序數(shù)組的實現(xiàn)的相關資料,這里提供實現(xiàn)實例,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • C語言數(shù)據(jù)結構 棧的基礎操作

    C語言數(shù)據(jù)結構 棧的基礎操作

    這篇文章主要介紹了C語言數(shù)據(jù)結構 棧的基礎操作的相關資料,需要的朋友可以參考下
    2017-05-05
  • Visual Studio 2022卡死分析

    Visual Studio 2022卡死分析

    本文主要介紹了Visual Studio 2022卡死分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C++實現(xiàn)LeetCode(121.買賣股票的最佳時間)

    C++實現(xiàn)LeetCode(121.買賣股票的最佳時間)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(121.買賣股票的最佳時間),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 基于C語言實現(xiàn)簡易三子棋游戲

    基于C語言實現(xiàn)簡易三子棋游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • C++實現(xiàn)LeetCode(198.打家劫舍)

    C++實現(xiàn)LeetCode(198.打家劫舍)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(198.打家劫舍),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C++自定義函數(shù)判斷某年某月某日是這一年中第幾天

    C++自定義函數(shù)判斷某年某月某日是這一年中第幾天

    這篇文章主要介紹了C++自定義函數(shù)判斷某年某月某日是這一年中第幾天的方法,涉及C++日期與時間操作相關技巧,需要的朋友可以參考下
    2016-06-06
  • VisualStudio2022編寫C語言的實現(xiàn)步驟

    VisualStudio2022編寫C語言的實現(xiàn)步驟

    VisualStudio2022是一款強大的集成開發(fā)環(huán)境,可以用來編寫C語言程序,本文主要介紹了VisualStudio2022編寫C語言的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • C語言之快速排序案例詳解

    C語言之快速排序案例詳解

    這篇文章主要介紹了C語言之快速排序案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++使用郵件槽實現(xiàn)ShellCode跨進程傳輸

    C++使用郵件槽實現(xiàn)ShellCode跨進程傳輸

    在計算機安全領域,進程間通信(IPC)一直是一個備受關注的話題,在本文中,我們將探討如何使用Windows郵件槽(Mailslot)實現(xiàn)ShellCode的跨進程傳輸,需要的可以參考下
    2023-12-12

最新評論

江门市| 武陟县| 鄂温| 万宁市| 蓬溪县| 惠安县| 淄博市| 丰镇市| 镇平县| 台中市| 都江堰市| 东至县| 湾仔区| 喀什市| 张家口市| 广宁县| 衡东县| 汤阴县| 柘城县| 东台市| 双牌县| 湖州市| 静安区| 汕头市| 泰和县| 丰宁| 桃园市| 普兰县| 佛坪县| 巴彦淖尔市| 洛浦县| 青川县| 盐边县| 榆林市| 镇康县| 揭东县| 达拉特旗| 大荔县| 基隆市| 清水县| 准格尔旗|