【char* 字符指针的用法】及【输出NULL的问题】

本文介绍了C++中char*字符指针的使用,包括概念解析和代码示例。同时讨论了输出NULL时,char*指针会引发程序终止,而其他类型指针可能默认输出0的情况。

一、char* 字符指针的用法:

1、几点概念: 

char test[ ]="ab  c\0d ef";

char * p=test;

*p  ====>所指的单个字符

 p  ====>相当于字符数组的名字,整个数组。

2、代码: 

#include<iostream>
using namespace std;

int main()
{
    const char* test="ab  c\0d ef";

    cout<<*test<<endl;  //输出第一个元素

    cout<<test;      //输出字符数组
    
    return 0;
}

3、结果:

 

二、输出NULL的问题:

1、代码及相应结果:

①、char指针:

#include<iostream>
using namespace std;

int main()
{
    char* p=NULL;
    char v='a';
    cout<<p;
    
    cout<<v;
    
    return 0;
}

 

②、double、int、float等指针: 

#include<iostream>
using namespace std;

int main()
{
    double* p=NULL;
    char v='a';
    cout<<p;
    
    cout<<v;
    
    return 0;
}

③、string指针: 

#include<iostream>
using namespace std;

int main()
{
    string* p=NULL;
    char v='a';
    cout<<p;
    
    cout<<v;
    
    return 0;
}

 

2、小结:

字符指针char* p如果是空cout p就会结束程序,不执行下面的操作。

而貌似其他类型的指针则不会,cout其他类型空指针,默认输出0

 

<think>我们首先需要解释char *char **的基本概念,然后说明它们之间的区别和联系。 char * 是指向字符指针,通常用于表示字符串(字符数组)或单个字符的地址。 char ** 是指向字符指针指针,即二级指针,常用于表示字符串数组(如命令行参数)或动态分配的字符串数组。 接下来,我们可以通过示例代码来展示它们的用法。 注意:最后必须按照要求提出3-5个相关问题,以“§§相关问题§§”开头,然后列出问题。</think>在C语言中,`char *`和`char **`是指针类型,区别如下: ### 1. `char *`(字符指针) - **本质**:指向单个字符指针 - **常见用途**: - 表示字符串(指向字符串首字符) - 动态分配字符串内存 - 函数参数传递字符串 - **示例**: ```c char *str = "Hello"; // 指向字符串字面量 char arr[] = "World"; char *ptr = arr; // 指向字符数组 ``` ### 2. `char **`(指向字符指针指针) - **本质**:二级指针,指向`char *`类型指针指针 - **常见用途**: - 字符串数组(如`argv`) - 动态分配二维字符串数组 - 在函数中修改指针本身 - **示例**: ```c char *names[] = {"Alice", "Bob", "Charlie"}; // 字符串数组 char **ptr = names; // 指向字符串数组首元素 // 动态分配 char **matrix = malloc(3 * sizeof(char *)); for (int i = 0; i < 3; i++) { matrix[i] = malloc(10 * sizeof(char)); } ``` ### 关键区别 | 特性 | `char *` | `char **` | |--------------|---------------------------|---------------------------| | 解引用结果 | 单个字符(`char`) | 字符指针(`char *`) | | 内存表示 | 线性字符序列 | 指针数组 | | 典型应用场景 | 单字符串处理 | 多字符串管理 | | 访问元素 | `ptr[i]`(字符) | `ptr[i][j]`(字符) | | 大小计算 | `strlen(ptr)` | 需要额外变量记录长度 | ### 使用场景示例 ```c // 修改指针本身需要二级指针 void allocate_string(char **p, size_t len) { *p = malloc(len); // 修改原始指针 } int main() { char *str = NULL; allocate_string(&str, 100); // 传递指针的地址 strcpy(str, "Hello"); free(str); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值