指针的初始化

指针的使用之一:初始化 在使用指针时如果出现了错误,第一步我们首先检查指针是否正确的进行了初始化。指针总是指向一个地址的,因此在检查初始化是否正确的时候, 可以关注一下,“=”号的右边是不是一个地址。 指针的初始化主要有两大类方法: 一是给指针变量初始化一个在内存中已经存在的地址;二是通过指针变量申请一块新的内存并赋初值。 接下来从这三个方面来详细列出: **一是给指针变量初始化一个在内存中已经存在的地址,**常用的有... 阅读详情
1.    字符指针的初始化

在c语言中 "string"保存的就是首个字符所在的地址  所以可以把 字符串常量"string" 赋值给指针 char *p;  p="string"  但不能把字符串常量直接赋给数组,需要用到 strcpy。  但可以对数组初始化为字符串,也就是字符数组。如  char str[] = "string"; 

    两种初始化的区别:char * p="the fine day" 和 char str[]="the fine day"  不同, 这两个都是给字符串的初始化,前者只是把字符串的首地址给str,没有分配足够的内存地址来保存整个字符串 , 后者初始化的同时,把他们保存在数组中,也就是分配好了所有字符需要的内存。 所以:

(1)  char *p = "string";    // 地址变量p 保存的是 's' 的地址,,
(2)  char str[] = "the fine day";    //字符数组str保存的是整个字符串,某些情况下退化为指针
(3)  char *str1 = "the day";  // OK.
此时,如果要复制另一个字符串str1 到p或str:
strcpy(p, str1);    //
错误!   需改为  p=(char*)malloc( strlen(str1)+1 );  才正确
strcpy(str, str1);    //
没错误,已有足够内存,但不能总是保证。
strncpy(str, str1, strlen(str) );    //
正确!不作讨论

实际上,(1)中是不对的,好像新标准已经会报错;
通常应该这样初始化:strcpy(p, "string");
或者改为:const *p = ""string";  但这样就不能修改p了。

2.    整形指针的初始化

试看下面语句哪一行 能够 打印输出?
int a = 10;
int * p1 = 0;     
int * p2 = &a;  //常见,初始化为某变量的地址
int * p3 = 20;    
printf("p1=%p, *p1=%d\n", p1, *p1);
printf("p2=%p, *p2=%d\n", p2, *p2);
printf("p3=%p, *p3=%d\n", p3, *p3);
这几行语句编译时会有警告:p3那一行将整数赋值给指针,没做类型转换。
运行时会导致崩溃。
为什么呢?
仔细看一下,int * p1 = 0;     //真的初始化了吗?
                     int * p3 = 20;    // *p3 初始化成20了吗?
其实int *p1 = 0 相当于 int *p1 = NULL,不能读取空指针 p1 以及 *p1 的值!
而 int *p3 = 20 相当于 int *p3;   p3 = (int *)0x00000014; 不能读取*p3的值。

3.    指针数组的初始化

问题一:
const char *p[] ={"aaa", "bbb"};        // 这样在定义p的时候完成了初始化,那么
int *p1[] ={1,2};       //
Wrong! 为什么不可以? 如何在定义p1的时候进行初始化?
int *p2[] = {NULL, NULL};        //
OK. 这样又可以了?
问题二:
我想定义一个指针数组(虽然很少人用这个东西),那么,对这个指针的初始化怎么做?
int * pstr[5];
------------------------
 const char *p[] = {"aaa", "bbb"};  指向字符的指针数组,数组中的元素是字符串,指针数组保存的是字符串首地址,没有问题。
对于int *p1[] ={1, 2}而言,存在二义性,它既可以表示int p1[2][0],即p1[0][0]=1,p1[1][0]=2
也可表示为int p1[n][2],即:p1[0][0]=1,p1[0][1]=2; 
我们可以这样:
    int *p[3];
    for(i=0; i<3; ++i)
    {
        p[i] = (int *)malloc( sizeof(int));
    }
    /* Do something with p[i] */

    for(i=0; i<3; ++i)
    {
        free(p[i]); 
    }
不然怎么样呢? 这样比较好:
int arr[3][2] = { {1, 2},  {3, 4},  {5, 6} };
int *pa[3];
for(int i=0;  i < 3; ++i) {
    pa[i] = arr[i];
}
而 int *p[3] = { {1, 2},  {3, 4},  {5, 6} };  是不行的!Warning一堆。


4.    struct 指针的初始化

struct_type *p;
p = (struct_type *)malloc( sizeof(struct_type) );

总之,
尽量用其他变量来初始化指针。
指针必须初始化才能使用 //下面的语句会出现“ The variable 'temp' is being used without being initialized."的错误;//这说明指针必须要先初始化才可以使用,比如pointer_1和pointer_2#include "stdio.h" voi 阅读详情

相关推荐

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5858

C语言基础---指针数组----初始化方式&常量指针数组、指针常量数组

文章目录1. 1. #include <stdio.h> int main() { char* str[3] = { "stra","strb","strc" }; char* p = str[0]; int i = 0; while (i < 3) { printf("%s\n", p++); i++; } return 0; } stra tra ra char指针数组可以指向多个字符,直到遇到空为止。p本来指向第一个字符,但是因为是指针,所以要遇

Alien-Hu 1万+

SAP BTP开发入门:从PaaS到CAP/UI5的30天学习路线

在云计算与数字化转型的大背景下,企业系统集成与云端扩展需求激增,传统的单点开发模式正面临深刻变革。PaaS(平台即服务)作为云原生的核心概念,将基础设施、开发环境与应用服务统一封装,为企业提供了灵活的扩展能力。SAP BTP正是SAP生态中的PaaS平台,它承载着系统集成、低代码开发、AI服务与数据管理,成为连接S/4HANA等核心业务系统与创新应用的桥梁。对于ABAP开发者而言,掌握BTP不仅是技能升级,更是应对从传统部署向云端订阅模式转型的必由之路。本文从平台基础出发,梳理BTP的核心服务与开发模型(如

weixin_31766003的博客 284

C语言初始数组+指针

C语言初始一维数组 二位数组 一级指针 二级指针 野指针

m0_63112274的博客 1582

allegro转AD-(附工具)

本文介绍了将Allegro的.brd文件转换为Altium Designer可用的.alg文件的操作流程。首先需要下载专用转换工具,然后通过运行.bat脚本将.brd文件转换为.alg格式。最后在Altium Designer中使用导入向导完成文件转换,生成可用的PCB设计文件。整个过程简单快捷,只需三个步骤即可实现Allegro到Altium Designer的工程文件转换。

weixin_50120208的博客 1717

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 895

C指针初始化

之前学C++对指针初始化印象中有这种方式 int *p = 1。渐渐成习惯了,惯性理解成这样:自动给p分配一个值,指向的地址中的值是1。错误的理解方式一直延续,最近看C语言指针部分,练习好几个程序都出问题,最终发现问题在于初始化。指针如果不初始化,成为野指针是很危险的,不知道它指向哪里,会导致覆盖随机的内存区域。指针初始化大概有三种方式: 1. 将一个同类型变量的地址赋值给指针 例如

keep_vitality的博客 1654

AI漫剧全套万能提示词合集

今天给大家整理一套已经跑通爆款漫剧的万能提示词库!覆盖:豆包剧本人设词 + 分镜生成词 + 即梦绘图词 + 动态优化词 + 防翻车固定词直接复制粘贴,新手也能做出稳定、高清、统一、有质感的AI漫剧!你是资深短视频漫剧编剧,擅长制作60秒竖屏爆款AI漫剧,请为我创作一集完整漫剧内容。要求:开头3秒高能抓眼,中段有冲突转折,结尾留强悬念钩子,节奏紧凑、适合短视频流量。首先生成固定统一人物人设:包含脸型、五官、发色、发型、穿搭、身材、气质、画风、光影细节,要求足够精细,保证全程角色不变脸。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1898

指针初始化

1.指针初始化 错误的初始化: //代码1 #include <stdio.h> int main() { int* a; *a = 1; printf("%d\n",a); return 0; } 上面代码声明创建了一个名为a的指针变量,然后把1赋值给a所指向的那块内存空间。编译结果如下: a未初始化,到底指向哪里根本我们不得而知。所以我们在进行赋值操作的时候可能有下面几种情况: 1.a的初始值是一个非法地址,赋值语句出错,程序终止。它提示程序访问的是一个并未分配给程序的

woohu的博客 3315

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3276

uniapp - 超详细 H5 网页引入百度地图教程,附地图示例 / 获取当前设备定位的省市区、详细地址、经纬度信息 / 用户当前 IP 属地定位地理位置等等(新手小白快速上手,详细配置及使用全流程)

uniapp百度地图,uniapp百度地图ip属地定位,uniapp百度地图获取省市区详细地址经纬度等,uniapp百度地图当前用户设备定位省份市区详细所在地ip属地等详细教程示例,uniapp网页h5引入百度地图详细教程,uniapp h5网站使用百度地图详细教程,uniappH5端如何接入使用百度地图api,uniapp H5网页端百度地图获取地理位置信息,uniapp h5页面引入百度地图,uniapp h5平台百度地图获取城市信息,uniapp百度地图获取经纬度,uniapp 百度地图拿省市区用什么

🏆 前端领域优质创作者 6217

指针以及指针的初始化

一、指针的定义 第一种 显性定义 int *a; 注意: 这里的 * 只是作为一个指针类型的标识符 该声明的意思: a是一个指向整数类型的指针变量 针对这个有以下几个误区: 误区一 对于 * 这个符号的理解的不足 例子一 int a; int *b = &a; 例子二: *b = 10 (这个假设b指针变量已经初始化了,否则这样单独赋值是不对的) 对于例子一 int *b = &a; 中可以理解为 * 是一个指针标志符 对于例子二

weixin_43055572的博客 1518

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 964

指针数组的初始化

http://see.xidian.edu.cn/cpp/biancheng/view/152.html  二维数组 http://blog.youkuaiyun.com/chenshijun0101/article/details/6640377  二维数组的初始化 http://zhidao.baidu.com/link?url=vyfuS7PW30wuN4dVrZl8eMWF4KSpGUhrb2

芒果布丁00的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c++ 指针的初始化

/ 初始化为 nullptr// 在 C++11 之前的代码中常见初始化为变量的地址。

淘气の小狼人的博客 2995

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++中的指针初始化

C++中定义一个指针的时候,例如 int *p。 可以认为定义了两个内容,1:指针,2:指针的指向。需要对指针本身和指针的指向都进行初始化,既要初始化内存地址,也要定义内存中的内容。如果不进行指针的初始化,则内存地址随机分配。格根据编译器的不同,会出现警告或者报错不同等级的问题,在编译中也可能出现难以察觉的bug。 指针的初始化时等号左右两端都必须是内存地址。例如 int a; int ...

kangshuangzhu的博客 2万+

关于指针变量初始化的一些思考

首先是指针变量的定义:指针是一种保存变量地址的变量。 指针中最容易出现理解错误的地方就是指针为什么一定要先初始化,下面我将递进式的讨论这个问题。 一,首先定义指针*p1;此时p1中保存的必须是一个地址,下面这段代码是非法的,因为赋初始值时p1必须指向一段地址。 int a=5; int *p1; p1=a; 二,下面这段代码和和上面代码的区别就是让p1=a,而不是p1=a,按照优先级也就是(p1)=a,这里就牵扯到指针最难理解的地方。p1内存放的是一段地址,而*"“的含义则是指向p1内存放的地址中的

zds6935的博客 1539

空指针和未初始化的指针的区别

转载: https://blog.youkuaiyun.com/qingkongyeyue/article/details/539943551.为什么指针变量定义时一定要初始化? 答:因为你首先要理解一点.内存空间不是你分配了才可以使用只是你分配了之后使用才安全,为什么要进行对他初始化呢因为,如果你没对他初始化,而引用这个指针并却其指向的内存进行修改因为指针未被初始化,所以指针所指向的也是随机的,他是个野指针...

zhenguo26的博客 3960

C 结构体指针初始化

原文 C 结构体指针初始化,优快云同步发布。 转载请注明出处,谢谢! 在使用指针之前,务必要将其初始化。这个是我们最早学习 C 语言的时候,书上经常说的一个问题。在工作中,我们反而会经常忘记这条金科玉律。 本篇文章的所有代码都经 gcc-7 编译器编译过。关于在 macOS 中如何安装和使用 gcc,可以参考 GCC: Homebrew 安装 GCC 和 Binutils 这篇文章。 结构体成......

CodingMan 3万+

结构体指针一定要进行初始化,指针也要进行初始化

C语言

qq_39224221的博客 1930

C语言指针数组初始化

1.char类型的指针 char*names[]={"zhangsan","lisi","wangwu"};//可以这样初始化 这样,每个指针指向对应的字符串 2.其他类型的指针 int*nums[]={1,2,3,4,5};//不可以这样初始化 原因:指针的初始化或赋值可以使用0值、常量表达式、和类型匹配的对象 的地址。//指针需要用地址初始化 如上,字符串字面值常...

wyy_csdn博客 3万+

指针的声明和初始化

摘要:C语言指针详解:从基础到高级类型解析。文章系统介绍了指针的声明和初始化方法,涵盖整型指针、字符指针、数组指针、函数指针等核心类型,特别解析了函数指针数组和指针数组的区别。重点强调指针运算规则、内存安全注意事项(如空指针检查、越界访问)和初始化最佳实践(包括动态内存管理)。通过代码示例演示各类型指针的典型用法,并指出常见错误防范措施。适用于需要深入理解指针机制和提升代码安全性的开发者。

一叶之秋的博客 1373
上一篇: CFileFind用法
下一篇: TCP 连接状态详解
ToConnection
博客等级 码龄16年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值