C零基础视频-37-指针数组与数组指针

目录

  • 指针数组
  • 数组指针

指针数组

指针数组是数组,即一个数组中,每个元素都是指针。

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue1 = 1;
    int nValue2 = 2;
    int nValue3 = 3;
    int * nArray[3] = { &nValue1, &nValue2, &nValue3 };

    char* sz1 = "hello";
    char* sz2 = "world";
    char* szArray[2] = { sz1, sz2 };
    return 0;
}

实际上,C标准中的main的第二个参数argv,就是一个指针数组。
argv数组中,每一个元素都是一个指针,指向char类型数据,又因为C语言中字符串的特殊约定,实际上argv数组中的每一个元素,指向的是字符串。

数组指针

数组指针是指针,即一个指向数组的指针。

#include <stdio.h>

int main(int argc, char* argv[])
{
    char szBuff[4] = { 1, 2, 3, 4 };
    char(* pArray)[4] = &szBuff;
    return 0;
}

数组指针的应用,主要是结合二维数组,可以使得通过指针,“一行一行地”改变地址:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char szBuff[2][4] = { 1, 2, 3, 4 };
    char(* pArray)[4] = &szBuff[0];
    printf("%p\r\n", &szBuff[0][0]);
    printf("%p\r\n", pArray);
    printf("%p\r\n", &szBuff[1][0]);
    printf("%p\r\n", pArray + 1);
    return 0;
}

原文地址:https://www.cnblogs.com/shellmad/p/11695636.html

时间: 2024-10-08 19:08:46

C零基础视频-37-指针数组与数组指针的相关文章

C零基础视频-35-指向同一个地址的指针的内涵

目录 C语言中的强制类型转换 指向同一个地址的指针 指针的两个内涵 C语言中的强制类型转换 C语言中运行将数据类型强制转换,使用(TYPE) 变量的方式即可. 比如,如下有警告: #include <stdio.h> int main(int argc, char* argv[]) { int nValue = 0; double fltValue = 3.14; nValue = fltValue; return 0; } 强制转换后没有警告: #include <stdio.h>

C零基础视频-38-函数指针与typedef

目录 函数指针的定义 函数指针的复杂性 typedef 函数指针的定义 函数在内存中也是有地址的: #include <stdio.h> void fun() { printf("hello, world\r\n"); } int main(int argc, char* argv[]) { printf("%p\r\n", fun); return 0; } 既然有地址,就可以定义指针存储改地址,存储函数(首)地址的指针,称为函数指针. 函数指针的定义

C零基础视频-36-指针相关的运算

目录 比较大小 指针的加减法 使用指针遍历数组 比较大小 同类型的指针是可以比较大小的,不同类型的指针不能比较大小: #include <stdio.h> int main(int argc, char* argv[]) { int nValue1 = 0; int nValue2 = 0; int* p1 = &nValue1; int* p2 = &nValue2; printf("p1: %p\r\n", p1); printf("p2: %

C零基础视频-33-指针的定义与使用

目录 指针的定义语法 指针指向变量地址 取变量的地址 变量地址赋值给指针变量 通过指针修改内存中的内容 指针的定义语法 指针变量中存放的是其他变量的地址,因此指针的类型,也与其要存放的地址类型有关. 有存放int型变量地址的指针,也有存放double型变量地址的指针. 具体而言,指针变量的声明语法是: 类型 * 指针变量名; 如: int *pIntValue = NULL; double *pDoubleValue = NULL; 以上分别定义了一个可以保存int变量地址以及可以保存doubl

[易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针]

实用知识 智能指针 我们今天来讲讲Rust中的智能指针. 什么是指针? 在Rust,指针(普通指针),就是保存内存地址的值.这个值,指向堆heap的地址. 什么是智能指针? 在Rust,简单来说,相对普通指针,智能指针,除了保存内存地址外,还有额外的其他属性或元数据. 在Rust中,因为有所有权和借用的概念,所以引用和智能指针,又有一点不一样. 简单来说,智能指针,拥有数据所有权,而引用没有. 智能指针分以下几种: 1.Box,用于在堆里分配内存. 2.Rc,引用计数类型,用于多线程中的多个所有

C零基础视频-34-通过指针实现函数交换两个变量的值

目录 回顾:函数的值传递 使用指针交换两个变量的值 回顾:函数的值传递 因为函数的调用过程中,实参到形参是值传递,因此,改变形参,是无法影响到实参的: #include <stdio.h> void FakeSwap(int nArg1, int nArg2) { int nTemp = nArg1; nArg1 = nArg2; nArg2 = nTemp; } int main(int argc, char* argv[]) { int nValue1 = 100; int nValue2

C零基础视频-30-二维数组的定义与使用

目录 二维数组的定义 二维数组的初始化 二维数组的引用 二维数组的定义 type 数组名[行][列] 二维数组的初始化 全部初始化为0: char chAry[2][3] = { 0 }; 全部初始化为特定值: char chAry[2][3] = { 0x00, 0x01, 0x02, 0x10, 0x11, 0x12 }; 或者区分行: char chAry[2][3] = { { 0x00, 0x01, 0x02, }, { 0x10, 0x11, 0x12, } }; 略过某行,部分初始

C零基础视频-40-结构体指针

目录 结构体指针的定义 使用结构体指针引用结构体成员 结构体指针作为函数参数传递 结构体指针的定义 结构体指针的定义与基本数据结构的指针类似,使用"*"符号即可: #include <stdio.h> struct tagPetDog{ char szName[20]; char szColor[20]; char nWeight; }; int main(int argc, char* argv[]) { tagPetDog dog = { "旺财",

C零基础视频-31-二维数组应用之游戏中的碰撞检测

目录 没有碰撞检测的版本 碰撞检测 没有碰撞检测的版本 #include <windows.h> #include <conio.h> #include <stdio.h> void MoveCursorTo(int nRow, int nCol) { COORD crdLocation; crdLocation.X = 2*nCol; crdLocation.Y = nRow; SetConsoleCursorPosition(GetStdHandle(STD_OUT