C指针

void int_point();
void One_dimensionalArray();
void Two_dimensionalArray();
int main()
{
    int_point();
    One_dimensionalArray();
    Two_dimensionalArray();
}
//整形指针
void int_point()
{
    int *p;
    int a = 1;
    p = &a;
    //p1表示存放a的地址
    cout << p;
    cout << "\n";
    // *p1表示取出地址p1里存放的数
    cout << *p;
    cout << "\n";
}
//一维数组指针
void One_dimensionalArray()
{
    int *p;
    int arr[5] = { 1,2,3,4,5 };
    //p表示数组arr的首地址
    p = arr;
    cout << p;
    cout << "\n";
    //也可以这样写,与p=arr是等价的
    p = &arr[0];
    cout << p;
    cout << "\n";
    //用指针访问数组元素
    /*
        假设arr起始地址未1000;
        p(地址)           1000    1001    1002    1003    1004
        i               0       1       2       3       4
        *(p+i)(元素)  1       2       3       4       5
        数组的存放在内存中是连续的,所以第i个元素就是*(p+i).
    */
    for (int i = 0; i < 5; i++)
        cout << *(p + i);
    cout << "\n";
}
//二维数组指针
void Two_dimensionalArray()
{
    int(*p)[5];//指针数组:*p指向一个地址中的内容,共有5个*p,即5个首地址
    int arr[5][5] = { 0 };//初始化数组;
    p = arr;
    cout << p;//p指向arr的首地址
    cout << "\n";
    cout << p[0];//等价于p=arr;表示arr的首地址
    cout << "\n";
    /*
        访问数组元素:
        二维数组在内存中的存储结构
        i=0时(假设arr的首地址为1001)
        j           0       1       2       3       4
        p[j]        1001    1002    1003    1004    1005
        (*p)[j]     num1    num2    num3    num4    num5
        i=1时
        j           0       1       2       3       4
        (p+1)[j]    1006    1007    1008    1009    1010
        (*(p+1))[j] num6    num7    num8    num9    num10
        .
        .
        .
        所以第i行的首地址和第i+1行的首地址差值为5;
    */
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++)
            cin >> (*(p + i))[j];//表示第i行第j列的元素(第i行首地址为p+i,第j行首地址为(p+i)[0])
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++)


}
posted @ 2017-02-22 22:42  SEC.VIP_网络安全服务  阅读(133)  评论(0编辑  收藏  举报